函数返回最后2个数字大于INT数据类型的某个值的值

Gee*_*eva 2 sql sql-function sql-server-2008

是否有任何SQL函数可用于返回所有那些最后2个数字大于31的记录.基本上,有一列:INT数据类型中的OpenDate存储为'19810281',后两个值为81(应该是一个日期)所以它有错误的数据.

我想查询所有那些最后2列数的坏记录:OpenDate大于31?任何建议将不胜感激.

Mar*_*ith 5

您可以使用Modulo功能.

SELECT OpenDate 
FROM Table
WHERE OpenDate % 100 > 31
Run Code Online (Sandbox Code Playgroud)

与2008年一样,您可以使用DATE数据类型.这比int小一个字节,可以防止这种类型的问题.

或者,更可靠的检查是将值转换为char并使用,isdate因为它yyyymmdd是明确的.

SELECT OpenDate
FROM   TABLE
WHERE  LEN(OpenDate) <> 8
        OR ISDATE(CAST(OpenDate AS CHAR(8))) = 0
Run Code Online (Sandbox Code Playgroud)