![](/img/trans.png)
[英]Using regular expression in SQL select statement to find 11 digit numbers
[英]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.