加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 为什么0等于空字符串?

发布时间:2020-12-31 23:46:10 所属栏目:编程 来源:网络整理
导读:我必要一些辅佐来找到为什么以下T-SQL语句返回1(true): SELECT IIF( 0 = '',1,0) 我猜有人改变了ANSI选项,譬喻SET ANSI_NULLS或导致该举动的其他对象. 我的题目是我正在插手一些值,在最后一行中我有值由0和”值毗连,这是不正确的. 办理要领 这只是记录在案的

我必要一些辅佐来找到为什么以下T-SQL语句返回1(true):

SELECT IIF( 0 = '',1,0)

我猜有人改变了ANSI选项,譬喻SET ANSI_NULLS或导致该举动的其他对象.

我的题目是我正在插手一些值,在最后一行中我有值由0和”值毗连,这是不正确的.

办理要领

这只是记录在案的举动.我以为没有人搞砸这些配置.

请参阅MSDN上的data type precedence.

When an operator combines two expressions of different data types,the
rules for data type precedence specify that the data type with the
lower precedence is converted to the data type with the higher
precedence.

如注释中所述,空字符串在任何数字范例中转换为0,在转换为日期时转换为1900-01-01 00:00:00.000.

编辑:我以为您的真正题目是您的计划是必需插手差异数据范例的字段.办理这个题目的独一要领是对join子句举办转换,这会侵害查询机能.首要题目也许在于架构计划

编辑:
评述中有许多接头已经转移到谈天中.可是看起来不合逻辑,将空字符串转换为其他数据范例会发生恣意值.

这段代码:

SELECT CONVERT(int,'')
SELECT CONVERT(float,'')
SELECT CONVERT(date,'')
SELECT CONVERT(datetime,'')

天生此输出:

0
0
1900-01-01
1900-01-01 00:00:00.000

那么你可以祈望这种举动在其他前面的数据范例之间是同等的,而且祈望将0转换为日期会发生沟通的恣意值,但究竟并非云云.

SELECT CONVERT(date,0)

发生

Explicit conversion from data type int to date is not allowed.

由于它不是supported conversion

SELECT CONVERT(datetime,0)

返回

January,01 1900 00:00:00

以是,是的,这是稀疏和随意的,但现实上是记录息争释的.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读