SQL 服务器:DATEADD() 在使用字符串值时无法超过毫秒
SQL Server : DATEADD() not working beyond milliseconds when using a string value
有谁知道为什么会这样:
SELECT DATEADD(HOUR,4,'2021-11-01 05:10:00.0000000')
returns 出现以下错误:
Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.
但是当只使用最多毫秒像
SELECT DATEADD(HOUR, 4, '2021-11-01 05:10:00.000')
有效并且returns:
2021-11-01 13:10:00.000
并且在 table 中使用它时,该列包含 纳秒 之类的
SELECT DATEADD(HOUR, 4, column-name)
它也有效。
因为您提供了文字字符串,所以 DATEADD
将该值转换为其默认数据类型 datetime
。 datetime
精确到 1/300 秒,因此像 2021-11-01 05:10:00.0000000
这样的值太大了;它的精度大于 1/300 秒。
如果您将该值显式转换为最多 1/1000000 秒的日期和时间数据类型,它将起作用:
SELECT DATEADD(HOUR,4,CONVERT(datetime2(7),'2021-11-01 05:10:00.0000000'))
来自 dateadd 文档:
A string literal value must resolve to a datetime.
datetime类型只能接受毫秒。尝试解析精度高于毫秒的字符串将失败。
(请注意 datetime
四舍五入为 .000、.003 或 .007 秒。例如,1 毫秒向下舍入为 0。)
如果您尝试声明一个 datetime
并将其初始化为具有超过 3 位小数秒精度的文字字符串,则会发生相同的错误:
DECLARE @datetime datetime = '12:10:05.0000'
Msg 241, Level 16, State 1, Line 3
Conversion failed when converting date and/or time from character string.
您可以添加到 datetime2
,但您必须先声明 datetime2
变量,而不是使用字符串文字:
declare @date datetime2 = '2021-11-01 05:10:00.0000000'
SELECT DATEADD(HOUR, 4, @date)
2021-11-01 09:10:00.0000000
有谁知道为什么会这样:
SELECT DATEADD(HOUR,4,'2021-11-01 05:10:00.0000000')
returns 出现以下错误:
Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.
但是当只使用最多毫秒像
SELECT DATEADD(HOUR, 4, '2021-11-01 05:10:00.000')
有效并且returns:
2021-11-01 13:10:00.000
并且在 table 中使用它时,该列包含 纳秒 之类的
SELECT DATEADD(HOUR, 4, column-name)
它也有效。
因为您提供了文字字符串,所以 DATEADD
将该值转换为其默认数据类型 datetime
。 datetime
精确到 1/300 秒,因此像 2021-11-01 05:10:00.0000000
这样的值太大了;它的精度大于 1/300 秒。
如果您将该值显式转换为最多 1/1000000 秒的日期和时间数据类型,它将起作用:
SELECT DATEADD(HOUR,4,CONVERT(datetime2(7),'2021-11-01 05:10:00.0000000'))
来自 dateadd 文档:
A string literal value must resolve to a datetime.
datetime类型只能接受毫秒。尝试解析精度高于毫秒的字符串将失败。
(请注意 datetime
四舍五入为 .000、.003 或 .007 秒。例如,1 毫秒向下舍入为 0。)
如果您尝试声明一个 datetime
并将其初始化为具有超过 3 位小数秒精度的文字字符串,则会发生相同的错误:
DECLARE @datetime datetime = '12:10:05.0000'
Msg 241, Level 16, State 1, Line 3
Conversion failed when converting date and/or time from character string.
您可以添加到 datetime2
,但您必须先声明 datetime2
变量,而不是使用字符串文字:
declare @date datetime2 = '2021-11-01 05:10:00.0000000'
SELECT DATEADD(HOUR, 4, @date)
2021-11-01 09:10:00.0000000