部分重複我有一個列的表與looke像這樣的字符串:的Oracle SQL - 刪除字符串
static-text-here/1abcdefg1abcdefgpxq
從這個字符串1abcdefg
重複兩次,所以我希望刪除部分字符串,並返回:
static-text-here/1abcdefgpxq
我無法保證重複字符串的長度。在純SQL中,該操作如何執行?
部分重複我有一個列的表與looke像這樣的字符串:的Oracle SQL - 刪除字符串
static-text-here/1abcdefg1abcdefgpxq
從這個字符串1abcdefg
重複兩次,所以我希望刪除部分字符串,並返回:
static-text-here/1abcdefgpxq
我無法保證重複字符串的長度。在純SQL中,該操作如何執行?
如果你能保證重複的字符串的最小長度,像這樣的工作:
select REGEXP_REPLACE
(input,
'(.{10,})(.*?)\1+',
'\1') "Less one repetition"
from tablename tn where ...;
我相信這可以被擴展,以滿足一些聰明你的情況。
在我看來,你可能會推動SQL超越它的能力/設計。是否有可能以編程方式處理這種情況下的圖層,該圖層位於數據層之下,可以更輕鬆地處理此類事物?
的REPLACE
功能應該足以解決問題。
測試表:
CREATE TABLE test (text varchar(100));
INSERT INTO test (text) VALUES ('pxq');
INSERT INTO test (text) VALUES ('static-text-here/pxq');
INSERT INTO test (text) VALUES ('static-text-here/1abcdefgpxq');
INSERT INTO test (text) VALUES ('static-text-here/1abcdefg1abcdefgpxq');
查詢:
SELECT text, REPLACE(text, '1abcdefg1abcdefg', '1abcdefg') AS text2
FROM test;
結果:
TEXT TEXT2
pxq pxq
static-text-here/pxq static-text-here/pxq
static-text-here/1abcdefgpxq static-text-here/1abcdefgpxq
static-text-here/1abcdefg1abcdefgpxq static-text-here/1abcdefgpxq
AFAIK的REPLACE
功能是不是在SQL99標準,但大多數DBMS支持。我測試了它here,它適用於MySQL,PostgreSQL,SQLite,Oracle和MS SQL Server。
如果有多個重複?有什麼像'aaaaa'這樣的東西?那個'aa'兩次跟着'a'(導致'aaa')或者是'a'重複了5次,導致了'a'? –
@ m.buettner沒有多個重複。 「重複的字符串」從靜態文本開始並重復一次。 – Jeremy