2012-03-01 78 views
1

當代碼執行下面的代碼不會出現運行:日期時間問題與SQL Server存儲過程

存儲過程的代碼片段:

Click to view full SP

AND (@month_ref = 81201 
     AND tsks.grouping_ref = @grouping_ref 
     AND ts.start_dtm BETWEEN convert(datetime, '2011-11-28') 
          AND convert(datetime,'2012-01-01') 
    ) 
    OR (@month_ref = 81202 
     AND tsks.grouping_ref = @grouping_ref 
     AND ts.start_dtm BETWEEN convert(datetime,'2012-01-02') 
          AND convert(datetime,'2012-01-29') 
    )... 

服務器設置:

SQL Server設置爲:

  • 語言:英語(美國)

和Windows Server區域和語言設置爲:

  • 英語(美國)

我們的測試服務器設置爲英國英文和存儲過程似乎工作得很好。我有一種感覺,客戶設置不喜歡日期。

DB設計/數據

ts.start_dtm看起來像這樣在數據庫:

  • 數據類型 - 日期時間

    2011-04-01 00:00:00.000 
    

所以其設置爲 - YEAR | MONTH | DATE

我的存儲過程將start_dtm硬編碼爲'2012-01-02',它的格式也相同。

你能幫助我嗎?

問題是網站嘗試運行存儲過程時失敗。問題是數據轉換。我不得不分配日期轉換的格式。

+0

會發生什麼轉換的東西? – 2012-03-01 10:45:44

+0

我的問題將仍然存在...... :( – 2012-03-01 10:47:30

+0

你還沒有真正說過你得到了什麼錯誤/問題 - 你能否更新這個問題來補充這個問題? – 2012-03-01 11:01:22

回答

1

根本不需要明確的日期轉換。這是ISO8601格式,所以數據庫應當瞭解其直客:

ts.start_dtm Between '2011-11-28' AND '2012-01-01' 

如果你需要將它們轉換,指定你用的是什麼格式的字符串:如果你只是跳過

ts.start_dtm Between convert(datetime,'2011-11-28', 120) AND convert(datetime,'2012-01-01', 120) 
+0

120意味着什麼? – 2012-03-01 10:52:18

+1

120在本文的表格中解釋http:// msdn.microsoft.com/en-us/library/ms187928。aspx – 2012-03-01 11:05:05

+0

這解決了這個問題。當格式已經是ISO標準時,我仍然想知道爲什麼我需要120?我看到120指的是「ODBC規範 - yyyy-mm-dd hh:mi:ss(24h)」 – 2012-03-01 11:31:29