我在表statu
中有一个名为TB_ORDERS
的字段。
如果字段状态具有数值,我应该从报告中排除该记录 - 仅应按字母顺序显示。
我该怎么做?
答案 0 :(得分:1)
我应该从报告中排除该记录 - 只应显示字母。
您可以在过滤谓词中使用 REGEXP_LIKE 。
NOT REGEXP_LIKE(status, '[[:digit:]]+')
或者,
NOT REGEXP_LIKE(status, '\d+')
或者,
NOT REGEXP_LIKE(status, '[0-9]+')
例如,
SELECT * FROM TB_ORDERS
WHERE NOT REGEXP_LIKE(status, '[[:digit:]]+');
<强>演示强>
SQL> WITH TB_ORDERS AS(
2 SELECT 'abc123abc' status FROM dual UNION ALL
3 SELECT 'abcabc' status FROM dual UNION ALL
4 SELECT 'abcabc123' status FROM dual UNION ALL
5 SELECT '123abcabc123' status FROM dual
6 )
7 SELECT * FROM TB_ORDERS
8 WHERE NOT REGEXP_LIKE(status, '[[:digit:]]+');
STATUS
------------
abcabc
SQL>
或者,
SQL> WITH TB_ORDERS AS(
2 SELECT 'abc123abc' status FROM dual UNION ALL
3 SELECT 'abcabc' status FROM dual UNION ALL
4 SELECT 'abcabc123' status FROM dual UNION ALL
5 SELECT '123abcabc123' status FROM dual
6 )
7 SELECT * FROM TB_ORDERS
8 WHERE NOT REGEXP_LIKE(status, '\d+');
STATUS
------------
abcabc
SQL>
或者,
SQL> WITH TB_ORDERS AS(
2 SELECT 'abc123abc' status FROM dual UNION ALL
3 SELECT 'abcabc' status FROM dual UNION ALL
4 SELECT 'abcabc123' status FROM dual UNION ALL
5 SELECT '123abcabc123' status FROM dual
6 )
7 SELECT * FROM TB_ORDERS
8 WHERE NOT REGEXP_LIKE(status, '[0-9]+');
STATUS
------------
abcabc
SQL>
更新关于OP的请求
SQL> WITH TB_ORDERS AS(
2 SELECT '*abc123abc' status FROM dual UNION ALL
3 SELECT 'ab*cabc' status FROM dual UNION ALL
4 SELECT '****' status FROM dual UNION ALL
5 SELECT '123abcabc123' status FROM dual
6 )
7 SELECT * FROM TB_ORDERS
8 WHERE NOT REGEXP_LIKE(status, '[0-9]+');
STATUS
------------
ab*cabc
****
SQL>