简体   繁体   English

检查字符串中是否存在值

[英]Checking if values ​exist within string

I have such string: 'Oracle Database Token: xxxx.';我有这样的字符串:'Oracle 数据库令牌:xxxx。';

I need to return true or false if xxxx is one of three variants:如果 xxxx 是三个变体之一,我需要返回 true 或 false:

  • 1 or 11 or 111 or 1111 or 11111 or 111111 etc. 1 或 11 或 111 或 1111 或 11111 或 111111 等。
  • character '-'特点 '-'
  • number 123456789号码 123456789

I tried to build a regular expression for the regexp_substr() function but it turned out to be very hard.我尝试为regexp_substr() function 构建正则表达式,但结果非常困难。

Is this possible in a regular expression?这可能在正则表达式中吗?

You can use TRANSLATE to test for the first condition and the other two are simple tests for equality:您可以使用TRANSLATE来测试第一个条件,其他两个是简单的相等测试:

SELECT *
FROM   your_table
WHERE  token = 'Oracle Database Token: -.'
OR     token = 'Oracle Database Token: 123456789.'
OR     (   token <> 'Oracle Database Token: .'
       AND TRANSLATE( token, '_1', '_' ) = 'Oracle Database Token: .' )

Sample Data :样本数据

CREATE TABLE your_table ( token ) AS
  SELECT 'Oracle Database Token: -.' FROM DUAL UNION ALL
  SELECT 'Oracle Database Token: 123456789.' FROM DUAL UNION ALL
  SELECT 'Oracle Database Token: 1.' FROM DUAL UNION ALL
  SELECT 'Oracle Database Token: 111.' FROM DUAL UNION ALL
  SELECT 'Oracle Database Token: 111111.' FROM DUAL UNION ALL
  SELECT 'Oracle Database Token: 12111.' FROM DUAL UNION ALL
  SELECT 'Oracle Database Token: -12.' FROM DUAL;

Query Output :查询 Output

 | | TOKEN |代币 | |:-------------------------------- | |:-------------------------------- | | | Oracle Database Token: -. Oracle 数据库令牌:-。 | | | | Oracle Database Token: 123456789. | Oracle 数据库令牌:123456789。| | | Oracle Database Token: 1. | Oracle 数据库令牌:1。| | | Oracle Database Token: 111. | Oracle 数据库令牌:111。 | | Oracle Database Token: 111111. | Oracle 数据库令牌:111111。|

db<>fiddle here db<> 在这里摆弄


You could also write it as a regular expression:你也可以把它写成正则表达式:

SELECT *
FROM   your_table
WHERE  REGEXP_LIKE( token, '^Oracle Database Token: (1+|123456789|-)\.$' )

But simple string functions/comparisons might be quicker.但是简单的字符串函数/比较可能会更快。

I think you want:我想你想要:

where regexp_like(suchstring, '^Oracle Database Token: ([0-9]+|-)[.]'

EDIT:编辑:

If you want those specific numbers:如果你想要那些特定的数字:

where regexp_like(suchstring, '^Oracle Database Token: (1+|-|123456789)[.]'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM