美丽山水坑⼈的SQLServer检测数字类型的函数ISNUMERIC
前⼏天,遇到⼀个⼗分棘⼿的问题,有同事提出在是字符类型的列中进⾏起⽌号计算,⼤体是这样的
涂料工程施工方案
新起号=上⼀条⽌号+1
新⽌号=新起号+数量
⽽在这⼀列的数据是这样的
库存
CN003?005007
000890670000
98111100 库存
370111900000
001,800,900,00
~
~~~~~~~~~~~
⽊办法,问度娘吧,发现还是⾼⼈多啊,提出⽤ISNUMERIC(列名)=1,就是数字类型的,但是请看⼀下ISNUMERIC的说明⽂档ISNUMERIC
错过的情人语法 ISNUMERIC ( expression )
参数 expression 要计算的表达式。
返回类型 int
备注当输⼊表达式的计算结果为有效的 numeric 数据类型时,ISNUMERIC 返回 1;否则返回 0。有效的 numeric 数据类型包括以下类型:
int,numeric,bigint,money,smallint,smallmoney,
遂宁是几线城市tinyint,float,decimal,real
注意:对于不是数字的字符(如加号 (+)、减号 (-))和有效货币符号(如美元符号 ($))字符,ISNUMERIC 将返回 1。返回值为 1 确保可以将expression 转换为上述数字类型中的⼀种。但是此函数存在Bug,当判断的表达式是字符类型的表达式时,就乱了!'001,800,900'同样会认为是数字类型
可以替代的写法是企业档案工作规范
怎样一秒钟写完作业PATINDEX('%[^0-9]%', 列名)一百字周记
隋朝一共多少年如果返回值等于0,则是纯数字型(没有0~9之外的字符)。
ca when PATINDEX('%[^0-9]%', 列名)=0 then cast (列名 as decimal(18,0))+cast(1 as decimal(18,0)) el ~~~ end as 起号