SQL同一个字段进行数字类型字符串和文字字符串区分
目录
SQL同一个字段进行数字类型字符串和文字字符串区分
业务场景:针对同一个字段,既有数字类型的字符串(数字类型的字符串需要进行排序),又有非数字类型的字符串,因此需要对两者进行合并。
MySQL
可以使用
REGEXP
操作符结合正则表达式来判断。纯数字的正则表达式可以表示为
'^[0-9]+$'
,表示字符串只由数字组成。
-- 筛选出纯数字的记录
SELECT *
FROM your_table_name
WHERE route_no REGEXP '^[0-9]+$';
-- 筛选出包含文字字符的记录
SELECT *
FROM your_table_name
WHERE route_no NOT REGEXP '^[0-9]+$';
Oracle :
可以使用
REGEXP_LIKE
函数,同样使用正则表达式
'^[0-9]+$'
来判断
-- 筛选出纯数字的记录
SELECT *
FROM your_table_name
WHERE REGEXP_LIKE(route_no, '^[0-9]+$');
-- 筛选出包含文字字符的记录
SELECT *
FROM your_table_name
WHERE NOT REGEXP_LIKE(route_no, '^[0-9]+$');
SQL Server :
可以使用
LIKE
结合通配符来进行大致判断,但不如正则表达式精确。要实现类似正则的功能,可以使用
PATINDEX
函数结合模式匹配
-- 筛选出纯数字的记录
SELECT *
FROM your_table_name
WHERE PATINDEX('%[^0-9]%', route_no) = 0;
-- 筛选出包含文字字符的记录
SELECT *
FROM your_table_name
WHERE PATINDEX('%[^0-9]%', route_no) > 0;