为什么SQL中的以下Query返回true?
我希望它是假的,因为它无法转换为int
或数值
select ISNUMERIC(',')
返回1
???
select ISNUMERIC('0,1,2')
select ISNUMERIC(',,,')
也会返回1
如何在SQL中进行严格的数字检查?
答案 0 :(得分:5)
因为ISNUMERIC
回答了 nobody 曾经想要问的问题:
这个给定的字符串是否可以转换为任何的SQL Server数值数据类型?而且我不关心哪些类型它可以或不可以转换成。
这就是TRY_CONVERT
最终引入2012年的原因 - 回答有关您可能关心的特定数据类型的问题。
对于早期版本,您通常可以做的最好的事情是使用LIKE
来识别您做想要转换的字符串模式。
E.g。如果您只是想检测数字,请使用Value NOT LIKE '%[^0-9]%'
,其中要求不的Value
字符串包含不数字的任何字符。
答案 1 :(得分:3)
IsNumeric returns true for "," and "."
如果字符串可以转换为整数,数字/小数,浮点数或货币中的任何一个,则ISNUMERIC返回1。在这种特殊情况下,转换',。'货币成功并返回0.0000,因此ISNUMERIC返回1.
我们现在添加了一个名为
TRY_CONVERT
的新标量函数,它允许您使用可选样式从字符串转换为类型。如果转换失败,那么它将返回NULL。该功能的签名是:TRY_CONVERT(data_type[(length)], expression [,style])
答案 2 :(得分:2)
答案 3 :(得分:2)
根据手册页:
对于某些非数字字符,例如加号(+),减号( - )和有效货币符号(如美元符号($)),ISNUMERIC返回1。此外,它为一系列数据类型返回1,如:
因此,当bigint接受像230,000
这样的货币值时,逗号(,)也属于字符集,该字符集被认为是数字数据类型的一部分,类似于点(。)这是一个字符但是是十进制数据类型的一部分。