1

我需要针对特定​​日期调整三个查询以适应不同的时区。这些查询从前一天、日期范围和当天提取交易数据。服务器时间是格林威治标准时间,查询目前可以正常工作,以根据格林威治标准时间服务器时间提取交易数据。这一天从格林威治标准时间 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 开始时间。

在此先感谢您的帮助。

4

1 回答 1

1

(根据评论改写。)

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

只需确保传入适合您感兴趣的时区的正确值StartDateParamEndDateParam您不需要在查询中进行所有转换,对吗?

另请注意,“介于”令人讨厌地包含终点……对于您真正想说的 DATETIME 字段之类的内容来说,这很痛苦start <= datetime < end……

于 2012-08-08T18:15:24.983 回答