【问题标题】:ISDATE Validation issue 1753ISDATE 验证问题 1753
【发布时间】:2014-10-14 13:15:31
【问题描述】:

我有一个表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 上

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多