为什么isdate()将9996作为日期返回?

问题描述 投票:0回答:1

问题:我正在使用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:
sql-server t-sql sql-server-2022
1个回答
0
投票

为什么

ISDATE( 9996 )
表示

9996

“是”日期?
the thow期望一个character-string
参数,因此整数值

ISDATE(9996)
被隐式转换为字符串,然后将其解释为年度数字,可以将其扩大到

9996

通过假设这是一年四季的1月1日:SO
'9996'被解释为9996-Jan-01
,这是一个真实的日期
-只是未来约7,971年的一个真实日期...
文档中描述了这种隐式转换:

date
'9996'

是一个可以转换为字符字符串的字符串或表达式

问题2:

为什么
ISDATE( <expression> )

,但是

<expression>


功能与MS SQL Server自己的

特定

类型 - 与

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_CHR
AS_DATE

9996119996-01-018234118234-01-017234117234-01-016234116234-01-015234115234-01-014234114234-01-013234113234-01-012234112234-01-011754111754-01-011753111753-01-0117521752-01-0117511751-01-0112341234-01-01
0 0
0 0
0 0
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.