它不起作用,因为对于数据DATETIME
类型
日期范围 [is] 1753 年 1 月 1 日到 9999 年 12 月 31 日。
您必须使用新的数据类型DATETIME2
:
SET ANSI_WARNINGS OFF; --Not recommended
SET ARITHABORT OFF; --Not recommended
DECLARE @stringDate nvarchar(50)
SET @stringDate = '0001-01-01T12:00:00'
SELECT
@stringDate AS StringDate,
CONVERT(datetime, @stringDate, 126) AS Converted_DATETIME,
CONVERT(datetime2, @stringDate, 126) AS Converted_DATETIME2_A,
CONVERT(datetime2(0), @stringDate, 126) AS Converted_DATETIME2_B
结果:
StringDate Converted_DATETIME Converted_DATETIME2_A Converted_DATETIME2_B
------------------- ------------------ ---------------------- ----------------------
0001-01-01T12:00:00 NULL 0001-01-01 12:00:00.00 0001-01-01 12:00:00
Arithmetic overflow occurred.
DATETIME2
注意:如果您的日期/时间值没有“小数秒精度” ,您可以更改数据类型的默认精度: DATETIME2(0)
.