日期:2014-05-17  浏览次数:20338 次

问一个关于isdate的问题
用isdate判断输入的char函数的数字是否为日期时,如果把XXXX年YY月DD日写成这样的数字‘XXXXYYDD,
现在问题是为什么1753年1月1日以后的就会判断成是日期,但是1753年1月1日之前的就判断不是日期,这个如果要把1753年1月1日之前的就判断成是日期,要怎么弄啊?
代码如下:
select isdate('17521231'),isdate('17530101')

显示结果是:

0 1
为什么?有人知道原因么?

------解决方案--------------------
1753 的原因是这个http://blog.csdn.net/orchidcat/article/details/5694139
------解决方案--------------------
由于历法原因,datetime类型默认从1753年1月1日开始算。如果要使用之前的日期,要转换成datetime2/date等等。可以看联机丛书:ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_6tsql/html/83e378a2-6e89-4c80-bc4f-644958d9e0a9.htm
而isdate实际上是处理字符串而不是日期,无论把日期改成什么格式,默认都为datetime,所以isdate()这个函数目前为止无法判断1753年1月1日之前的日期。
建议把这部分的判断放到前端应用程序或者使用一些where 条件来判断。或者,使用一些判断日期格式的自定义函数来实现。