如何从投射列中识别错误?

时间:2019-04-10 19:43:42

标签: sql sql-server error-handling

我有一个全部为NVARCHAR的表。我正在尝试在日期中添加一列;但是,该列中似乎有一些值不会转换为日期,并且会在中途抛出错误。

我正在尝试查找有问题的行。但是,我不知道如何将结果等于错误。

SELECT id, 
CASE WHEN CAST(date_of_birth AS DATE) = error
     THEN 1
     ELSE 0
FROM TABLE1

表1

id    date_of_birth
1     05/05/1934
2     feathers
3     06/06/1843

预期结果

id    date_of_birth
1     0
2     1
3     0

关于如何隔离有问题的行的任何建议?

2 个答案:

答案 0 :(得分:6)

使用TRY_CAST()

SELECT id, 
       (CASE WHEN TRY_CAST(date_of_birth AS DATE) IS NULL AND date_of_birth IS NOT NULL
             THEN 1
             ELSE 0
        END) as is_bad_date_of_birth
FROM TABLE1;

答案 1 :(得分:1)

要识别错误行,请使用ISDATE函数:

SELECT * FROM TABLE WHERE ISDATE(date_of_birth)=0