SQL SERVER ISNUMERIC函数判断数字不准确问题
2018-03-15 15:14
274 查看
判断字段是不是数值型字段,SQL SERVER提供了ISNUMERIC函数:
但是对于不是数字的字符(如加号 (+)、减号 (-))和有效货币符号(如美元符号 ($))字符,ISNUMERIC 也将返回 1。例子如下: --测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([col] nvarchar(22))
Insert #T
SELECT '3' UNION
SELECT '123,67.00' UNION
SELECT '¥2342' UNION
SELECT '$8888' UNION
SELECT '+1'
Go
--测试数据结束
SELECT *
FROM #T
WHERE ISNUMERIC(#T.col) = 1 结果如下:
我们可以看到¥、$ 、,+等字符都算做了数值型,如果我们恰巧需要这种的判断,那么非常好,我们可以直接用,但是如果我们的需求是不能把这些符号算作数值型,那么就不行了,我们可以利用PATINDEX 来实现SELECT *
FROM #T
WHERE PATINDEX('%[^0-9]%', #T.col) = 0 结果如下:
如果我们还需要“+-”号这些,那么可以稍作改动:SELECT *
FROM #T
WHERE PATINDEX('%[^0-9|.|-|+]%', #T.col) = 0 结果如下:
所以我们在判断数值型时,可以根据需求选择不用ISNUMERIC函数,而是选择更符合要求的写法。
ISNUMERIC ( expression )当输入表达式的计算结果为有效的 numeric 数据类型时,ISNUMERIC 返回 1;否则返回 0。 有效的 numeric 数据类型包括以下类型:
int | numeric |
bigint | money |
smallint | smallmoney |
tinyint | float |
decimal | real |
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([col] nvarchar(22))
Insert #T
SELECT '3' UNION
SELECT '123,67.00' UNION
SELECT '¥2342' UNION
SELECT '$8888' UNION
SELECT '+1'
Go
--测试数据结束
SELECT *
FROM #T
WHERE ISNUMERIC(#T.col) = 1 结果如下:
我们可以看到¥、$ 、,+等字符都算做了数值型,如果我们恰巧需要这种的判断,那么非常好,我们可以直接用,但是如果我们的需求是不能把这些符号算作数值型,那么就不行了,我们可以利用PATINDEX 来实现SELECT *
FROM #T
WHERE PATINDEX('%[^0-9]%', #T.col) = 0 结果如下:
如果我们还需要“+-”号这些,那么可以稍作改动:SELECT *
FROM #T
WHERE PATINDEX('%[^0-9|.|-|+]%', #T.col) = 0 结果如下:
所以我们在判断数值型时,可以根据需求选择不用ISNUMERIC函数,而是选择更符合要求的写法。
相关文章推荐
- 坑人的SQL Server检测数字类型的函数ISNUMERIC
- 坑人的SQL Server检测数字类型的函数ISNUMERIC
- oracle判断是否为数字或数字型字符串(sqlserver isnumeric)
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
- java中判断字符串是否为数字的方法的几种方法 ava中判断字符串是否为数字的方法: 1.用JAVA自带的函数 public static boolean isNumeric(String str)
- t-sql判断一个字符串是否为bigint的函数(全角数字需要判断为不合格)
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
- 判断SQL-SERVER数据库表字段为空的问题
- 问题总结:判断MS SQLSERVER临时表是否存在
- 问题总结:判断MS SQLSERVER临时表是否存在 drop table #tempcitys
- SQLSERVER ISNULL 函数与判断值是否为空的sql语句
- SQL Server去重和判断是否为数字——OBJECT_ID的使用
- ms sql server 中的金额阿拉伯数字转换为中文的自定义函数
- 在sql 数据库中,用脚来判断字符串是否为数字的函数
- t-sql判断一个字符串是否为bigint的函数(全角数字需要判断为不合格)
- SQL查询时常用,但不熟悉的相关语句-----邮标,行号,临时表,类型转换,字符串函数,sql 判断语句,检查是不是数字,变量,sql split 函数
- t-sql判断一个字符串是否为bigint的函数(全角数字需要判断为不合格)
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
- sql server isnumeric 函数
- pl/sql 函数之判断多个分割的数字是否在某个范围