我将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]
答案 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