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)
如果需要支持多种语言设置,最好对 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 日”