从格林尼治标准时间00:00到格林尼治标准时间12:00,在SQL查询中修改日期字

时间:2012-04-16 05:33:25

标签: sql sql-server-2008 datetime timezone

我需要调整特定日期的三个查询以适应不同的时区。这些查询从前一天,日期范围和当前日期提取交易数据。服务器时间是GMT,并且查询当前可以根据GMT服务器时间提取交易数据。当天,格林尼治标准时间00:00开始,基于服务器时间的日历日。但是,我需要查询在格林尼治标准时间12:00开始,而不是格林尼治标准时间00:00。查询如下(数据类型是TransactionDate字段的日期时间):

查询1 此查询从前一天提取特定客户端的事务摘要,查询的WHERE子句如下:

WHERE TransactionDate >= DateAdd(DD, DateDiff(DD, 0, GETDATE())-1, 0) AND TransactionDate < DateAdd(DD, DateDiff(DD, 0, GETDATE()), 0)

查询2 此查询具有两个日期参数,并为提供的日期范围提供相同的事务数据。查询的WHERE子句如下:

WHERE TransactionDate BETWEEN @StartDateParam AND @EndDateParam

查询3 最后一个查询为当天的特定客户端提取事务摘要,查询的WHERE子句如下:

WHERE TransactionDate >= CONVERT(CHAR(10),GETDATE(),120)

同样,这些查询适用于当前的GMT服务器时间。有人可以为我提供正确的方法来调整每个查询中的日期时间字段的时间元素,以便时段从格林尼治标准时间15:00开始,而不是当前00:00 GMT开始时间。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

(从评论中重写。)

我建议您使用 开始部分或第二个版本进行查询。

请确保传递适合您感兴趣的时区的StartDateParamEndDateParam的正确值。您无需在查询中执行所有转换你呢?

另请注意,“介于两者之间”令人烦恼地包含了终点......对于DATETIME字段这样的事情来说很痛苦,你真的想说start <= datetime < end ......