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



>im 尝试使用 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加入。贝斯克

该 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 中解决此问题吗?

以下是更多 sql:

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

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

X[!KS]% = C,(字符串与 X 一起凝视,其中第 2 个字符不是 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)是检查第二个字符。

最新更新