ISDATE验证问题1753

时间:2014-08-21 02:15:04

标签: sql sql-server tsql sql-server-2005

我有一个表RpParams,其中的列名为ParamNameParamValue。它们都是varchar(200)类型。

本月早些时候存储过程开始失败。

我把它缩小到了

SELECT 
   ParamName,
   ParamValue =
        CASE 
           WHEN ISDATE(ParamValue) = 1 
             THEN CAST(CAST(RTRIM(LTRIM(ParamValue) AS DATETIME) AS VARCHAR(50))
           ELSE ParamValue
        END
...

ParamValue中的值一旦达到1753或更高,就会出现此问题。我知道1753 - 9999被视为有效日期,因此ISDATE现在返回1并将1753值转换为日期。

如何验证字段但避免我遇到的> = 1753问题?

这是在SQL Server 2005上

1 个答案:

答案 0 :(得分:1)

由于看起来像有效年份的字符串在转换为日期时转换为当年的1月1日,我们希望确保varchar看起来不像数字。你想要:

CASE WHEN ISDATE(ParamValue) = 1 AND ISNUMERIC(ParamValue) = 0