2017-01-09 13 views
5

我用SQL語句向表中插入兩個日期,但是我在具有不同SQL Server和設置語言的不同機器上使用它。有時候,「2017年1月4日00:00:00」是2017年4月1日有時則是2017年01月04,我想月01不同語言的SQL Server上的語句

INSERT INTO [table] ([id], [value], [datefrom], [dateto]) 
    SELECT 
     NEWID(), 3.5, '2017-01-04 00:00:00', '2027-01-05 00:00:00' 
    FROM 
     [settings] 

我可以只使用使用SET LANGUAGE german;在腳本的開始這個設置只是暫時的,並且不會永久改變語言?或者這不是一個好的方法嗎?請參閱下面的使用語句提前致謝。

SET LANGUAGE german; 

INSERT INTO [table]([id], [value], [datefrom], [dateto]) 
    SELECT 
     NEWID(), 3.5, '2017-01-04 00:00:00', '2027-01-05 00:00:00' 
    FROM 
     [settings] 
+0

http://dba.stackexchange.com/a/39439/110455 – McNets

回答

4

如果你需要支持多國語言設置,最好使用(稍作改動) ISO-8601格式用於SQL Server date-as-string-literals。

如果您需要使用DATETIME(應爲的SQL Server 2008被淘汰 - 使用DATE如果你只需要日期,DATETIME2(n)如果你需要兩個日期&時間),使用以下兩種格式中的一種:

YYYYMMDD HH:MM:SS  // **NO** dashes for the date portion! 

YYYY-MM-DDTHH:MM:SS  // delimiter "T" between date and time parts 

最好,如果你真的只需要DATE(沒時間),使用DATE數據類型,然後使用以下格式:

YYYYMMDD 

這是保證總是和工作,而無需切換各地日期和語言設置只是爲了讓你的INSERT報表工作....

因此20170401總是被解釋爲「 2017年4月1日「

2

可以使用中性語言(ODBC)文字,{d 'YYYYMMDD'}日期和{ts'YYYY-MM-DD hh:mm:ss[.nnn]'}的日期時間。

所以

{ts '2017-04-01 00:00:00'} 

應該工作。