我有一个表RpParams
,其中的列名为ParamName
和ParamValue
。它们都是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上
答案 0 :(得分:1)
由于看起来像有效年份的字符串在转换为日期时转换为当年的1月1日,我们希望确保varchar看起来不像数字。你想要:
CASE WHEN ISDATE(ParamValue) = 1 AND ISNUMERIC(ParamValue) = 0