我正在尝试将日期时间(createTime)字段从其默认的2012-10-06 02:29:37.243格式转换为上午/下午,因此我使用

convert(varchar, CreateTime, 100) as CreateTime

并获得 2012年10月6日4:29 AM

到目前为止一切顺利,但我想在同一条语句中减去4小时,然后显示该字段(格林尼治标准时间问题)。

我在这里浏览了一些帖子,但是在单个语句中找不到任何可以做到的事情。

最佳答案

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这样的单个值并不总是有效。以下是处理一般情况的一些想法:

Effectively Converting dates between UTC and Local (ie. PST) time in SQL 2005

关于sql-server - SQL转换日期时间并减去小时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12756769/

10-11 13:11