从字符串转换日期 and/or 时间时转换失败。 T-Sql
Conversion failed when converting date and/or time from character string. T-Sql
我的数据库中有一个名为 ref003 的 varchar 列,它存储如下日期时间
2021-04-04 20:01:03
在这里,日期格式如yyyy-MM-DD
当我执行以下 select 查询时出现错误
SELECT *
FROM FileIndex
WHERE CAST(CONVERT(CHAR(30), CONVERT(DATETIME, Ref003, 105), 101) AS DATE)
BETWEEN CAST(CONVERT(CHAR(10), CONVERT(DATETIME, '01-01-2021', 105), 101) AS DATE)
AND CAST(CONVERT(CHAR(10), CONVERT(DATETIME, '31-12-2021', 105), 101) AS DATE)
错误是
Msg 241, Level 16, State 1, Line 5 Conversion failed when converting
date and/or time from character string.
这里有什么问题,我该如何解决这个问题?
首先,对于转换,您需要转换为 VARCHAR
,而不是 DATE
。注意这个表达式:
CONVERT(VARCHAR(10), CAST(<your date value> AS DATE), 20)
考虑到这一点,您可以像这样清理查询:
--==== Easily consumable sample data
DECLARE @thetable TABLE (someid INT, thedate DATETIME);
INSERT @thetable
VALUES(1,'2021-04-04 20:01:03'),(2,'2021-06-04 22:01:05'),(1,'2021-04-29 10:31:11');
--==== Solution
SELECT t.*, FormattedDate = fmt.Dt
FROM @thetable AS t
CROSS APPLY (VALUES(CONVERT(VARCHAR(10), CAST(t.thedate AS DATE), 20))) AS fmt(Dt)
WHERE t.thedate BETWEEN '20210401' AND '20210501';
Returns:
someid thedate FormattedDate
----------- ----------------------- -------------
1 2021-04-04 20:01:03.000 2021-04-04
1 2021-04-29 10:31:11.000 2021-04-29
我的数据库中有一个名为 ref003 的 varchar 列,它存储如下日期时间
2021-04-04 20:01:03
在这里,日期格式如yyyy-MM-DD
当我执行以下 select 查询时出现错误
SELECT *
FROM FileIndex
WHERE CAST(CONVERT(CHAR(30), CONVERT(DATETIME, Ref003, 105), 101) AS DATE)
BETWEEN CAST(CONVERT(CHAR(10), CONVERT(DATETIME, '01-01-2021', 105), 101) AS DATE)
AND CAST(CONVERT(CHAR(10), CONVERT(DATETIME, '31-12-2021', 105), 101) AS DATE)
错误是
Msg 241, Level 16, State 1, Line 5 Conversion failed when converting date and/or time from character string.
这里有什么问题,我该如何解决这个问题?
首先,对于转换,您需要转换为 VARCHAR
,而不是 DATE
。注意这个表达式:
CONVERT(VARCHAR(10), CAST(<your date value> AS DATE), 20)
考虑到这一点,您可以像这样清理查询:
--==== Easily consumable sample data
DECLARE @thetable TABLE (someid INT, thedate DATETIME);
INSERT @thetable
VALUES(1,'2021-04-04 20:01:03'),(2,'2021-06-04 22:01:05'),(1,'2021-04-29 10:31:11');
--==== Solution
SELECT t.*, FormattedDate = fmt.Dt
FROM @thetable AS t
CROSS APPLY (VALUES(CONVERT(VARCHAR(10), CAST(t.thedate AS DATE), 20))) AS fmt(Dt)
WHERE t.thedate BETWEEN '20210401' AND '20210501';
Returns:
someid thedate FormattedDate
----------- ----------------------- -------------
1 2021-04-04 20:01:03.000 2021-04-04
1 2021-04-29 10:31:11.000 2021-04-29