regex 如何从特定单词后跟随机数的列中选择值

scyqe7ek  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(186)

我需要从一个表中的所有值在一列中出现的文字'演示'后面的数字。
我的数据库是Oracle。

ID    NAME
------------
1     demo20
2     demo26
3     demo
4     any

我只需要价值观 用一个带数字的演示词。现在我有这个:

select * from table where NAME like 'demo';
svmlkihl

svmlkihl1#

您可以使用REGEXP_LIKE实现此目的

select * from t where REGEXP_LIKE(name, '^demo\d');

此处测试:https://sqlize.online/sql/oracle19/4284f904af9157489dc4a0c9d9515c7c/

+====+========+
| ID | NAME   |
+====+========+
| 1  | demo20 |
| 2  | demo26 |
+----+--------+

当您需要过滤器字符串不包含额外的字符后的数字,你可以使用下一个:

select * from t where REGEXP_LIKE(name, '^demo\d+$');
vshtjzan

vshtjzan2#

可以使用查找以子字符串demo开头且至少包含以下一个字符的名称:

SELECT *
FROM   table_name
WHERE  name LIKE 'demo_%'

如果要查找仅后跟尾随数字的demo,则可以在Oracle 12中用途:

SELECT *
FROM   table_name
WHERE  name LIKE 'demo_%'
AND    VALIDATE_CONVERSION(SUBSTR(name, 5) AS NUMBER) = 1;

或者,在大多数版本中:

SELECT *
FROM   table_name
WHERE  REGEXP_LIKE(name, '^demo\d+$');

其中,对于示例数据:

CREATE TABLE table_name (name) AS
SELECT 'demo20' FROM DUAL UNION ALL
SELECT 'demo26' FROM DUAL UNION ALL
SELECT 'demo2a' FROM DUAL UNION ALL
SELECT 'demo'   FROM DUAL UNION ALL
SELECT 'any'    FROM DUAL;

两个输出:
| 姓名|
| - ------|
| 演示20|
| 演示26|
fiddle

相关问题