我正在尝试在托管实例中执行以下查询。
SELECT
T.name
FROM sys.tables T
WHERE T.name NOT IN ('ElsevierExtracts')
AND CAST(RIGHT(T.name,6) AS DATE) < DATEADD(DAY,-8,GETDATE())
AND T.type = 'U'
它会引发如下错误:
从字符转换日期和/或时间时转换失败 字符串
该查询包含在Execute SQL任务的SSIS包中,但由于转换而出现错误。
答案 0 :(得分:1)
使用TRY_CAST
或TRY_CONVERT
代替普通的CAST
通过使用类似TRY_CONVERT(DATE, RIGHT(T.name,6) ) < DATEADD(DAY,-8,GETDATE())
的条件,不会因表名不匹配而出错。
按如下所示更改查询。
SELECT
T.name
FROM sys.tables T
WHERE T.name NOT IN ('ElsevierExtracts')
AND TRY_CONVERT(DATE, RIGHT(T.name,6) ) < DATEADD(DAY,-8,GETDATE())
AND T.type = 'U'
答案 1 :(得分:0)
因为表的name
列数据格式错误。
例如:
select CAST(RIGHT('xxxx',6) AS DATE);
它将得到Conversion failed when converting date and/or time from character string.
您必须确保数据格式如日期,如下所示:
select CAST(RIGHT('20190218',6) AS DATE); --Run Success