使用不同语言的不同SQL Server的声明

use*_*665 5 sql sql-server date

我将一个SQL语句插入到表中的两个日期,但我在具有不同SQL Server和设置语言的不同机器上使用它.有时'2017-01-04 00:00:00'是2017年4月1日,有时是2017年1月4日.我想要4月01日.

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]
Run Code Online (Sandbox Code Playgroud)

我可以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]
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 4

如果需要支持多种语言设置,最好对 SQL Server 日期字符串文字使用(稍作修改的) ISO-8601格式。

如果您需要使用DATETIME(从 SQL Server 2008 开始应该逐步淘汰 -DATE如果您只需要日期,则使用DATETIME2(n),如果您需要日期和时间),请使用两种可能的格式之一:

YYYYMMDD HH:MM:SS        // **NO** dashes for the date portion!
Run Code Online (Sandbox Code Playgroud)

或者

YYYY-MM-DDTHH:MM:SS      // delimiter "T" between date and time parts
Run Code Online (Sandbox Code Playgroud)

最好,如果您确实只需要DATE(没有时间),请使用DATE数据类型,然后使用以下格式:

YYYYMMDD
Run Code Online (Sandbox Code Playgroud)

这保证始终有效,而无需为了使您的INSERT语句有效而切换日期和语言设置......

因此20170401始终被解释为“2017 年 4 月 1 日”