目录

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;