25

我正在尝试将 datetime (createTime) 字段从其默认的 2012-10-06 02:29:37.243 格式转换为 am/pm 所以我使用

convert(varchar, CreateTime, 100) as CreateTime

并获得Oct 6 2012 4:29AM

到目前为止一切顺利,但在同一个语句中,我想减去 4 小时,然后显示该字段(GMT 问题)。

我在这里浏览了一些帖子,但找不到任何可以在单个语句中执行的操作。

4

3 回答 3

39
declare @createTime datetime = '2012-10-06 02:29:37.243';

-- original value, default formatting
select @createTime;

-- formatted
select convert(varchar, @createTime, 100);

-- subtract 4 hours, formatted
select convert(varchar, dateadd(hour, -4, @createTime), 100);

上面使用的查询dateadd将始终减去 4 小时。如果您的目标是将任意日期时间从 UTC 转换为本地时间,那么它会更复杂,因为您需要添加/减去的偏移量取决于原始日期时间。像 -4 这样的单个值并不总是有效。以下是处理一般情况的一些想法:

在 SQL 2005 中有效地在 UTC 和本地(即 PST)时间之间转换日期

于 2012-10-06T04:59:11.900 回答
2

对于想要减去天数和小时数的人

    declare @createTime datetime = '2012-10-06 02:29:37.243';
select @createtime as originaltime, dateadd(day, -4, dateadd(hour,-1,@createtime))as minus4daysandhour
于 2016-11-13T13:16:54.103 回答
0

对于 SQL 服务器,您可以使用datetimeoffset

对于 mysql 使用CONVERT_TZ函数来转换到不同的时区。

于 2012-10-06T04:55:21.870 回答