从报告

时间:2015-05-06 06:54:45

标签: sql oracle oracle-apex regexp-like

我在表statu中有一个名为TB_ORDERS的字段。

如果字段状态具有数值,我应该从报告中排除该记录 - 仅应按字母顺序显示

我该怎么做?

1 个答案:

答案 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>
相关问题