Insert无法正确输入日期,即使它是默认格式



我正试图在SQL Server 2008 Express中,在一个新创建的数据库和一个新表中插入一些数据。当我执行该语句时,它会向我抛出一个错误,内容如下:

从varchar数据类型转换为smalldatetime生成超出范围值。

我犯了什么错误吗?日期格式是默认格式。有什么想法吗?

INSERT INTO WDL (grnr,kknr,lfnr,ktja,gebg,ktnr,kpnr,zszl,rsrn,chid,fpay,kcnr,res3,uknr,trnr,type,psnr) VALUES ('171114502', '161199999', '306', '2021-11-18 20:15:00', '2021-11-18 20:15:00', '171114497', '171114497', '0', '306', '29', '1', '16147256251234830750', '3', '161199999', '306','2', '29-1611-1-306')

SQL Server的时态数据类型有两个不同的SQL ISO标准值规范,它们是:

'YYYYMMDD hh:mm:ss.nnn' for the DATETIME and SMALLDATETIME
'YYYY-MM-DD hh:mm:ss.nnnnnnn' for the DATETIME2, DATETIMEOFFSET and DATE

为什么?因为当SQL语言的SQL:1999版本发布时,标准发生了变化。DATETIME和SMALLDATETIME保留了来自早期RDBMS领域的Sybase。。。

这两个标准不涉及";文化;

演示

SET LANGUAGE French;
DECLARE @DTo DATETIME, @DTs SMALLDATETIME
SELECT @DTo = '20220131 23:59:59.987', @DTs = '20220131 23:59:59.987'
SELECT @DTo, @DTs

注意,由于四舍五入,@DT显示第二天的日期

DECLARE @DT2 DATETIME2, @D DATE, @DTZ DATETIMEOFFSET
SELECT @DT2 = '2022-01-31 23:59:59.9876543', 
@D = '2022-01-31 23:59:59.9876543', 
@DTZ =  '2022-01-31 23:59:59.9876543+01:00'
SELECT @DT2 , @D , @DTZ

请注意,DATE数据类型不再取整。。。

最新更新