[英]Conversion failed when converting date and/or time from character string
我收到此错误:当我尝试在 SQL 服务器 2008 R2 中运行以下查询Conversion failed when converting date and/or time from character string
:
DECLARE @Time datetime = N'7/13/2011'
DECLARE @str as varchar(100) = '2011_07_13_DM_VT_I2_Data'
DECLARE @TestTime datetime = cast(replace (left (left(@str, len(@str) - len('_data')), 10), '_', '') as datetime)
DECLARE @r int = datediff(d, @TestTime, @Time)
SELECT t.name FROM
(
SELECT
name
FROM
sysobjects
WHERE
(type = 'U') AND ((name LIKE '%[_]I2[_]Data') or (name LIKE '%[_]R4[_]Data') or (name LIKE '%[_]R8[_]Data'))
) t
WHERE
datediff(DAY, cast(replace (left (left(t.name, len(t.name) - len('_data')), 10), '_', '') as datetime), @Time) <= 1
ORDER BY
cast(replace (left (left(t.name, len(t.name) - len('_data')), 10), '_', '') as datetime) desc
如果我注释掉WHERE datediff(DAY, cast(replace (left (left(t.name, len(t.name) - len('_data')), 10), '_', '') as datetime), @Time) <= 1
这个查询运行良好WHERE datediff(DAY, cast(replace (left (left(t.name, len(t.name) - len('_data')), 10), '_', '') as datetime), @Time) <= 1
,那么我想知道这是否是cast
function 的问题。 但是t
表将具有像'2011_07_13_DM_VT_I2_Data'
这样的表名,您可以在@TestTime
中看到强制cast
function 可以正常使用这种格式。 我不知道WHERE
条件有什么问题。
感谢您的任何帮助。
您需要将查询分成两部分,因为看起来查询优化器已决定应用外部查询中的 where 子句,然后才从子查询中的 sysobjects 中过滤掉行。
你可以试试这样的。
DECLARE @Time datetime = N'7/13/2011'
DECLARE @str as varchar(100) = '2011_07_13_DM_VT_I2_Data'
DECLARE @TestTime datetime = cast(replace (left (left(@str, len(@str) - len('_data')), 10), '_', '') as datetime)
DECLARE @r int = datediff(d, @TestTime, @Time)
SELECT name INTO #TMP
FROM
sysobjects
WHERE
(type = 'U') AND ((name LIKE '%[_]I2[_]Data') or (name LIKE '%[_]R4[_]Data') or (name LIKE '%[_]R8[_]Data'))
SELECT *
FROM #TMP as t
WHERE
datediff(DAY, cast(replace (left (left(t.name, len(t.name) - len('_data')), 10), '_', '') as datetime), @Time) <= 1
ORDER BY
cast(replace (left (left(t.name, len(t.name) - len('_data')), 10), '_', '') as datetime) desc
DROP TABLE #TMP
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.