2012-04-16 116 views
1

我需要调整特定日期的三个查询以适应不同的时区。这些查询从前一天,日期范围和当天提取交易数据。服务器时间是格林尼治标准时间,查询目前正常工作正常拉动基于GMT服务器时间的交易数据。当天开始于格林威治标准时间00:00,这是一个基于服务器时间的日历日。不过,我需要询问格林尼治标准时间12:00开始的一天,而不是格林尼治标准时间00:00。该查询是以下(数据类型是用于TransactionDate字段日期时间):SQL查询中的修改日期字段从00:00 GMT到12:00 GMT

查询1 该查询拉动来自前一天为特定客户端的事务综上所述,其中查询的子句如下:

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开始时间。

在此先感谢您的帮助。

+1

你为什么不只是* *仅使用起始部分或第二个版本查询。只要确保您传递的StartDateParam和EndDateParam适合您感兴趣的时区的正确值。您不需要在查询中进行所有转换,对吗? – 2012-04-16 06:02:59

+0

是的,您对查询2是正确的,除了日期之外,我还可以输入实际时间值,例如15:00:00,并根据正确的时间提取数据。但对于查询1和3,我需要以某种方式指示查询使用15:00格林威治标准时间作为日间部分而不是格林威治标准时间0:00。我只是不知道如何指定格林威治标准时间的15:00,而不是默认的格林尼治标准时间0:00。 – thenextmogul 2012-04-16 08:19:11

+0

您错过了我的观点 - 我建议您以与查询2 *相同的方式表示查询1 *,并将查询3表示为查询2的较短版本(只是没有结束日期)。 – 2012-04-16 08:30:38

回答

1

(从意见重写。)

我建议你要么只是开头部分或第二版本的查询。

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

另外请注意,“之间”就是烦人包容终点......它的东西像DATETIME领域,在那里你真正想说start <= datetime < end痛......