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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值