You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PLSQL精准筛选并输出包含恰好10位数值的记录?

调整PLSQL正则查询以筛选仅含恰好10位数值的记录

原查询语句:

SELECT carddetails 
FROM cc_emp_card 
WHERE  REGEXP_LIKE ( carddetails,'[[:digit:]]{10}?([^[:digit:]])');

当前输出包含带11位及以上连续数字的不符合预期记录,需要筛选出仅包含恰好10位数值的记录,当前输出和预期输出如下:

当前输出

FT 6820220419001794 xxx asdfwf 2 BIM 2022
FT 6820220419001796 xsdjcc jcw 2 BIM 2022
FT 6820220419001796 ajscbjk , c dk2 BIM 2022
000006650445/Business Meals (Staff with Externals)
5010083131,1234567890
1234567890
5010009921 dcbjwk ft 4959 29.04
5010018300 Dmdbchbk jdkjw 11 del 09.05
5000630739 dbcwbdj FT 9/001 DEL 13.05
5010015146 mnwd chjw    FT 4 DEL 29.04.22

预期输出

5010083131,1234567890
1234567890
5010009921 dcbjwk ft 4959 29.04
5010018300 Dmdbchbk jdkjw 11 del 09.05
5000630739 dbcwbdj FT 9/001 DEL 13.05
5010015146 mnwd chjw    FT 4 DEL 29.04.22

修改后的查询语句

SELECT carddetails 
FROM cc_emp_card 
WHERE REGEXP_LIKE(carddetails, '^(.*[^[:digit:]])?[[:digit:]]{10}([^[:digit:]].*)?$')
AND NOT REGEXP_LIKE(carddetails, '[[:digit:]]{11,}');

逻辑说明

  • 第一个正则表达式确保记录中存在至少一组连续的10位数字,且这组数字的前后要么是非数字字符,要么处于字符串的开头或结尾位置。
  • 第二个条件直接排除所有包含11位及以上连续数字的记录——这正是原查询出现不符合预期结果的核心原因,原正则会匹配长数字里的前10位(比如14位数字的前10位),导致长数字条目被错误选中。

内容的提问来源于stack exchange,提问作者Shri Nivi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:02:04