SQL转换日期时间和减去小时数

时间:2012-10-06 04:37:43

标签: sql-server sql-server-2008 tsql

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

convert(varchar, CreateTime, 100) as CreateTime

2012年10月6日上午4:29

到目前为止一直很好,但在同一声明中,我想减去4个小时,然后显示字段(GMT问题)。

我在这里发过一些帖子,但在单一陈述中找不到任何可以做到的事情。

3 个答案:

答案 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