希望能够快速解决这个问题。
以下不起作用:
DECLARE @stringDate nvarchar(50)
SET @stringDate = '0001-01-01T12:00:00'
SELECT
@stringDate AS StringDate,
CONVERT(datetime, @stringDate, 126) AS ConvertedDate
产生错误:将nvarchar数据类型转换为日期时间数据类型会导致超出范围的值。
实现转换的最简单方法是什么?
由于
答案 0 :(得分:7)
类型Datetime
不支持年份0001.支持的范围是1753到9999
作为解决方法,您可以使用类型DateTime2
代替
SELECT
@stringDate AS StringDate,
CONVERT(datetime2, @stringDate, 126) AS ConvertedDate
答案 1 :(得分:5)
它不起作用,因为DATETIME
data type
日期范围[是] 1753年1月1日至9999年12月31日。
您必须使用new data type 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)
。