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

时间:2017-01-09 10:45:29

标签: sql sql-server date

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

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]

3 个答案:

答案 0 :(得分:4)

如果您需要支持多种语言设置,最好使用(略微调整的) ISO-8601 格式的SQL Server日期 - 字符串文字。

如果您需要使用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日"

答案 1 :(得分:2)

您可以使用语言中性(ODBC)文字,{d 'YYYYMMDD'}表示日期,{ts'YYYY-MM-DD hh:mm:ss[.nnn]'}表示日期时间。

所以

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

应该有效。

答案 2 :(得分:2)

命令     设置语言 适用于会话级别,因此它可以解决您的问题 有关详细信息,请参阅MDSN Article on the command