繁体   English   中英

在Sql中使用通配符匹配模式

[英]Using wildcards in Sql to match patterns

我试图使用LIKE匹配sql中的模式。

我的值类似于P1Sign:

XKA,
XKB,
XSA,
XSB,
XAA, 
any other combination starting with X

我喜欢这样匹配:

XK% = A,
XS% = B,
X[!KS]% = C, (string staring with X, where 2nd char not K or S)

我将其放在一个名为T16Kode的表中,并将其作为T16.Besk加入。

SQL:

AND P1Sign LIKE T16.Besk ('XS%')

AND P1Sign LIKE T16.Besk ('XK%')

工作正常并找到XKA,XKB和XSA,XSB,但是

AND P1Sign LIKE T16.Besk ('X[!KS]%')

与XAA不匹配

运行此程序时,我希望它得到XAA,因此可以将其与“ C”匹配。为什么我没有得到预期的结果? 无法使用[!KS]吗? 还有什么其他方法可以解决这个问题吗?

这是更多的SQL:

FROM p1perso P1 LEFT OUTER JOIN T16KODE T16 ON P1.p1adm = T16.T16Adm AND T16.T16KType = 'BHSIGN' AND P1.P1Sign LIKE T16.Besk

X [!KS]%= C,(字符串以X开头,其中第二个字符不是K或S)

那么简单的SUBSTR

SQL> WITH DATA AS(
  2  SELECT 'XKA' str FROM dual UNION ALL
  3  SELECT 'XKB' FROM dual UNION ALL
  4  SELECT 'XSA' FROM dual UNION ALL
  5  SELECT 'XSB' FROM dual UNION ALL
  6  SELECT 'XAA' FROM dual
  7  )
  8  SELECT str
  9  FROM DATA
 10  WHERE SUBSTR(str, 1, 1)    = 'X'
 11  AND SUBSTR(str, 2, 1) NOT IN ('K', 'S');

STR
---
XAA

SQL>

其中, SUBSTR(str, 1, 1)用于检查第一个字符, SUBSTR(str, 2, 1)用于检查第二个字符。

您可以使用regexp_like

WITH DATA AS(
    SELECT 'XKA' str FROM dual UNION ALL
    SELECT 'XKB' FROM dual UNION ALL
    SELECT 'XSA' FROM dual UNION ALL
    SELECT 'XSB' FROM dual UNION ALL
    SELECT 'XAA' FROM dual
    )
    SELECT str
    FROM DATA
    WHERE regexp_like (str, 'X[^KS]');



X -> first character
^[KS] -> second character not in K or S

暂无
暂无

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

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