【问题标题】:How to identify which record in a table has thrown error如何识别表中的哪条记录引发了错误
【发布时间】:2014-12-31 19:46:13
【问题描述】:

我在下面有一个表格,其中有一个varchar 列,格式为 yyyy-mm-dd

DATECOL
.......
2014-12-01
2014-12-02
2014-12-03
2014-12-04
2014-13-04

最后一条记录是垃圾数据,因为13 不是一个月,会引发错误 当我执行以下查询时。

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

这是我执行的查询

SELECT CAST(DATECOL AS DATE) DDD FROM #TEMP

现在我怎么知道哪一行导致了表中的错误,即2014-13-045th 记录。我如何从5th 记录中知道发生了错误?这在处理包含数百万数据的表时很有用。

【问题讨论】:

    标签: sql-server sql-server-2008 exception error-handling try-catch


    【解决方案1】:

    您可以使用名为 ISDATE() 的函数,该函数返回 1 表示可转换为日期时间/日期的值,返回 0 表示有效的日期时间/日期/时间值

    获取无效的日期时间/日期/时间值

    SELECT * 
    FROM #TEMP
    WHERE ISDATE(DATECOL) = 0
    

    如果您尝试将它们转换为日期时间/日期数据类型,将返回所有将出错的值。

    为避免在转换数据时遇到错误,您可以执行类似的操作

    仅转换有效的日期时间/日期/时间值

    SELECT CAST(DATECOL AS DATE) DDD 
    FROM #TEMP
    WHERE ISDATE(DATECOL) = 1
    

    【讨论】:

    • 那是工作阿里。现在我可以得到行号吗? @M.阿里
    • 这个问题的最佳解决方案是使用适当的数据类型来存储数据,有可能你应该改变这个列的数据类型。将来会为您节省大量时间和精力。
    猜你喜欢
    • 2020-05-27
    • 2018-03-11
    • 2018-07-13
    • 2019-06-05
    • 1970-01-01
    • 2018-12-23
    • 2021-09-08
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多