我正在尝试将datetime(createTime)字段从其默认的2012-10-06 02:29:37.243格式转换为上午/下午所以我使用
convert(varchar, CreateTime, 100) as CreateTime
并 2012年10月6日上午4:29 。
到目前为止一直很好,但在同一声明中,我想减去4个小时,然后显示字段(GMT问题)。
我在这里发过一些帖子,但在单一陈述中找不到任何可以做到的事情。
答案 0 :(得分:23)
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
答案 1 :(得分:0)
对于SQL Server,您可以使用datetimeoffset
对于mysql,使用CONVERT_TZ函数转换为不同的时区。
答案 2 :(得分:0)
对于想要减去日期和时间的人
declare @createTime datetime = '2012-10-06 02:29:37.243';
select @createtime as originaltime, dateadd(day, -4, dateadd(hour,-1,@createtime))as minus4daysandhour