从字符串转换日期和/或时间时转换失败-查询数据库时

时间:2020-10-19 11:31:21

标签: sql-server

以下代码:

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行
从字符串转换日期和/或时间时转换失败

如何确保数据库中存储的日期没有出现此错误?

ConvertCast并没有解决问题,请帮助!

2 个答案:

答案 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

相关问题