现在的位置: 首页 > 综合 > 正文

ISDATE函数对于1753年之前的日期都返回0

2013年08月06日 ⁄ 综合 ⁄ 共 665字 ⁄ 字号 评论关闭

今天看到一个帖子,将1753年之前的一个日期用ISDATE函数会返回0,自己也做了多个测试,发现确实如此:

 

declare @date asdate

 

set @date =convert(date,'17000101')

 

print @date  --可以转化为Date类型

 

print ISDATE('17000101')

 

结果确实返回0:

 

1700-01-01
0


 

后来看到有人提到可能跟SQL Server日期的存储范围,查了一下MSDN发现:

 

datetim的日期范围:

 

日期范围

1753 年 1 月 1 日到 9999 年 12 月 31 日

 

所以日期范围是从1753年之后开始,所以1753年之前的用ISDATE都会返回0,但是搞不懂为什么还可以转化成DATE字符型呢?

 

Datetime2扩大了日期范围,可以存储0001年之后的日期:

 

日期范围

0001-01-01 到 9999-12-31

公元元年 1 月 1 日到公元 9999 年 12 月 31 日

 

但是使用ISDATE是有限制的,如果 expression 是有效的datetimedatetime 值,则返回 1;否则,返回 0。如果expression
datetime2 值,则 ISDATE 返回 0。
所以即使使用Datetime2日期类型,使用ISDATE对这个问题应该还是无解。

 

另外ISDATE 的返回值取决于
SET DATEFORMAT
SET LANGUAGE配置默认语言服务器配置选项设定的设置。参考下文:http://msdn.microsoft.com/zh-cn/library/ms187347.aspx

 

 

 

 

【上篇】
【下篇】

抱歉!评论已关闭.