为什么ISDATE()函数为'9966'返回true?

时间:2011-10-14 07:32:27

标签: sql-server

我使用ISDATE()函数检查值是否为Date。但是当我放9966或任何四位数字时,该函数返回true

  1. 为什么会这样?
  2. 检查值是否为日期的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

是的,ISDATE()功能在某些情况下不可靠。所以,你应该学习如何Handle ISDATE() with care

  

ISDATE函数中的值首先被转换为日期时间

  

如果varchar数据类型用于存储格式化日期(例如YYYYMMDD),   要检查它是否是有效日期,您不仅需要使用ISDATE()   功能,还可以使用LEN()函数

答案 1 :(得分:1)

9966对于日期时间是隐含的CASTable,因为它是在1900年1月1日之后的9966天

试试这个(0是1900年1月1日)

SELECT DATEADD(day, 9966, 0)