我正在尝试从表中删除超过6个月的所有行。
问题是使用varchar列中的子字符串抓取日期,并且它并不总是有效日期。
这里是失败的查询:
Delete ExampleDatesTable
where CONVERT(datetime, SUBSTRING(DateField, LEN(DateField) - 18, 19)) < DATEADD(month, -6, GETDATE())
这是我想要做的,但它不起作用:
Delete ExampleDatesTable
where IsDate(SUBSTRING(DateField, LEN(DateField) - 18, 19)) = 1
AND CONVERT(datetime, SUBSTRING(DateField, LEN(DateField) - 18, 19)) < DATEADD(month, -6, GETDATE())
有解决方法吗?
答案 0 :(得分:1)
您可以先选择有效记录,然后根据日期删除。
WITH data AS (
SELECT * FROM ExampleDatesTable
WHERE ISDATE(SUBSTRING(DateField,LEN(DateField) - 18,19)) = 1
)
DELETE data
WHERE CONVERT(DATETIME,SUBSTRING(DateField,LEN(DateField) - 18,19)) < DATEADD(month,-6,GETDATE())