2012-04-16 115 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痛......