以下代码:
DECLARE @dateAsString AS nvarchar
SET @dateAsString = '2020-04-28T12:51:33.587Z'
DECLARE @dateObject as DATETIME
SET @dateObject = CAST(@dateAsString as DATETIME)
SELECT DATEDIFF(DAY, @dateObject, CURRENT_TIMESTAMP)
我收到此错误:
第241条消息,第16级,状态1,第6行
从字符串转换日期和/或时间时转换失败
如何确保数据库中存储的日期没有出现此错误?
Convert
和Cast
并没有解决问题,请帮助!
答案 0 :(得分:3)
该错误的原因是您需要定义@dateAsString
nvarchar变量的大小。如果未指定大小,则默认长度为1
,而@dateAsString
变量的实际值为2
。
此外,您也可以选择将CONVERT()
与适当的日期和时间样式一起使用:
DECLARE @dateAsString AS nvarchar(24)
SET @dateAsString = N'2020-04-28T12:51:33.587Z'
DECLARE @dateObject as DATETIME
--SET @dateObject = CAST(@dateAsString as DATETIME)
SET @dateObject = CONVERT(datetime, @dateAsString, 127)
SELECT DATEDIFF(DAY, @dateObject, CURRENT_TIMESTAMP)
答案 1 :(得分:0)
您的代码还可以,只有nvarchar很小才能容纳您的数据
DECLARE @dateAsString AS nvarchar(28) SET @dateAsString = '2020-04-28T12:51:33.587Z' DECLARE @dateObject as DATETIME SET @dateObject = CAST(@dateAsString as DATETIME ) SELECT DATEDIFF(DAY, @dateObject, CURRENT_TIMESTAMP)
GO
| (No column name) | | ---------------: | | 174 |
db <>提琴here