2012-07-17 42 views
0

由於服務器上的日期格式,我的腳本失敗。分配給sql server 2000中的變量時的日期格式問題

declare @lastDay as datetime 
declare @endDay as datetime 

set @lastDay = '2012-07-12 18:00:00.000' 
set @endDay = '2012-07-16 18:00:00.000' 

Select getdate(), @lastDay, @endDay 

在上面的代碼中,我分配的數據是(yyyy-mm-dd hh:mi:ss.mmm)格式。但是sqlserver把它當作(yyyy-dd-mm hh:mi:ss.mmm)。

但是,當使用(yyyy-mm-dd hh:mi:ss.mmm)格式的getdate()函數sql返回時。只有當我分配值時纔會出現問題。

相同的代碼在pc上工作正常,但在服務器上失敗。

結果我得到的服務器上面的代碼上是

2012-07-17 15:34:30.627 2012-12-07 18:00:00.000  NULL 

與錯誤信息

The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. 

我知道我可以使用轉換功能,但我幾百對DTS工作現在需要在服務器上進行安排,這對我來說並不是一個快速解決方案。

我想我需要改變服務器上的一些設置,默認情況下考慮(yyyy-mm-dd hh:mi:ss.mmm)。如果有人知道解決方案來解決這個問題,請幫助我。

+0

檢查服務器的區域設置,也許?在我的2008r2安裝中嘗試了這一點,日期如預期的那樣回到了y-m-d,而不是y-d-m。 – 2012-07-17 15:04:25

+0

@ murty是否在未登錄到機器時測試新接受的答案?我對使用模糊格式的日期對這個和其他服務器非常小心,在這些服務器上您可能無法控制區域設置,並且可能無法讓用戶全天候保持登錄狀態。 – 2012-07-19 15:27:24

回答

-1

我得到了解決方案,它在用戶配置文件中。我將用戶的默認語言從「英國英語」更改爲「英語」,每件事情都很正常。

也感謝您的快速回復。我從你的回答中獲得一些額外的知識。

謝謝。

+0

該用戶已登錄,這很正常。您是否在用戶註銷後測試了該行爲?哪個用戶是「用戶」? – 2012-07-17 16:17:02

2

當語言是法語時,YYYY-MM-DD不起作用。

你可以說:

SET @lastDay = CONVERT(DATETIME, '2012-07-12 18:00', 120); 

但更安全使用更安全的格式,避免了需要轉換:

SET @lastDay = '20120712 18:00:00.000'; 

或者,如果你真的想破折號,加的T分離器,這可以防止區域設置壓倒一切:

SET @lastDay = '2012-07-12T18:00:00.000'; 

固定格式的好處在於l et說你通過改變服務器的區域設置來「解決」這個問題。該「修復」僅在其他人改變設置時纔有效,因爲它會破壞其他內容,或者直到您將代碼移動到另一臺服務器。通過安全格式繞過所有這些問題。