簡體   English   中英

如何在字符序列中找到相同的兩位數正則表達式 SQL

[英]how to find the same two-digit numbers in a sequence of characters regular expressions SQL

我想打印出至少有兩個數字在 SQL 中重復的字符串

EX

11-22-33
11-22-44
22-22-33
55-22-33
11-66-33
11-88-33
33-88-33
77-77-22

輸出 :

22-22-33
77-77-22
33-88-33

但我不知道如何寫一個對我有幫助的正則表達式

對於這種固定格式的NN-NN-NN ,您可以只使用字符串函數並測試三種可能的組合:

select *
from mytable
where substr(val, 1, 2) = substr(val, 3, 2) 
   or substr(val, 1, 2) = substr(val, 5, 2) 
   or substr(val, 3, 2) = substr(val, 5, 2) 

我們可以花點心思,使用橫向連接而不是重復or條件。 如果您有 3 個以上的部分(組合數量迅速增加,這使得or解決方案不太方便),則可以更好地擴展:

select t.*
from mytable t
cross apply (
    select count(distinct part) cnt_distinct_part
    from (
        select substr(t.val, 1, 2) part
        union all select substr(t.val, 3, 2)
        union all select substr(t.val, 5, 2)
    ) x
) x
where x.cnt_distinct_part < 3

您可以使用正則表達式(^|-)(\\d+)(-\\d+)*-\\2(-|$)來匹配任意位數或項數的數字對。

  • (^|-)匹配第一個捕獲組()包含的字符串開頭^或連字符-
  • 后跟第二個捕獲組()包含的一個或多個數字字符\\d+以匹配數字對中的第一個;
  • 然后第三個捕獲組()匹配零次或多次*包含-后跟一個或多個數字\\d+以匹配匹配數字對之間的任意數量的數字;
  • 然后是一個連字符- ;
  • 然后是第二個捕獲組\\2的副本,它將匹配這對數字中的第二個;
  • 然后是連字符-或字符串結尾$

給出查詢:

SELECT value
FROM   table_name
WHERE  REGEXP_LIKE( value, '(^|-)(\d+)(-\d+)?-\2(-|$)' );

其中,對於樣本數據:

CREATE TABLE table_name ( value ) AS
SELECT '11-22-33' FROM DUAL UNION ALL
SELECT '11-22-44' FROM DUAL UNION ALL
SELECT '22-22-33' FROM DUAL UNION ALL
SELECT '55-22-33' FROM DUAL UNION ALL
SELECT '11-66-33' FROM DUAL UNION ALL
SELECT '11-88-33' FROM DUAL UNION ALL
SELECT '33-88-33' FROM DUAL UNION ALL
SELECT '77-77-22' FROM DUAL UNION ALL
SELECT '11-77-77' FROM DUAL UNION ALL
SELECT '11-177-77' FROM DUAL UNION ALL
SELECT '11-77-771' FROM DUAL UNION ALL
SELECT '123-456-123' FROM DUAL UNION ALL
SELECT '1-2-2' FROM DUAL UNION ALL
SELECT '99999-99999-0' FROM DUAL UNION ALL
SELECT '1-2-3-4-5-6-7-8-9-0-11-2-13' FROM DUAL;

輸出:

\n | 價值 |\n |  :-------------------------- |\n |  22-22-33 |\n |  33-88-33 |\n |  77-77-22 |\n |  11-77-77 |\n |  123-456-123 |\n |  1-2-2 |\n |  99999-99999-0 |\n |  1-2-3-4-5-6-7-8-9-0-11-2-13 |\n

db<> 在這里擺弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM