问题:我正在使用SSMS VER 20的最新版本的SQL Server 2022 Enterprise Edition。 为什么所有语句 - 除最后一行以外 - 返回1个值?我所有的设置都是默认设置。我没有对配置进行更改。
select ISDATE(9996) --returns 1, why?
select ISDATE(8234)
select ISDATE(7234)
select ISDATE(6234)
select ISDATE(5234)
select ISDATE(4234)
select ISDATE(3234)
select ISDATE(2234)
select ISDATE(1234) --returns 0, as expected
问题1:
ISDATE( 9996 )
表示被隐式转换为字符串,然后将其解释为年度数字,可以将其扩大到
9996
“是”日期?the thow期望一个character-string参数,因此整数值ISDATE(9996)
9996
通过假设这是一年四季的1月1日:SO
'9996'
被解释为9996-Jan-01,这是一个真实的日期-只是未来约7,971年的一个真实日期...
文档中描述了这种隐式转换::
date
'9996'
是一个可以转换为字符字符串的字符串或表达式
为什么ISDATE( <expression> )
,但是
??
<expression>
类型 - 与
ISDATE( 2234 ) == 1
,ISDATE( 1234 ) == 0
,ISDATE()
,
date
,
datetime
等相对,因此它也受SQL的约束服务器的可能值范围相当有限,该值必须在1753-JAN-01和9999-DEC-31.之间,该值必须在
1753-JAN-01
之间。...因此,
datetime2(n)
是有效的一年,但是time
是一个有效的一年,因为它早于1753。
防止:
smalldate
...有这些结果 - 注意1753年至1752年之间的过渡:Int_arg IS_DATE
IS_DATE_CHRAS_DATE
0 | 0 | ||
0 | 0 | ||
0 | 0 | ||