我有一张表格,其中有一个包含字符串的列看起来像这样:
static-text-here/1abcdefg1abcdefgpxq
这个字符串中1abcdefg
重复出现了两次,因此我想删除这部分字符串,并返回:
static-text-here/1abcdefgpxq
我无法保证重复字符串的长度。在纯SQL中,如何执行此操作?
regexp_replace('static-text-here/1abcdefg1abcdefgpxq', '/(.*)\1', '/\1')
select REGEXP_REPLACE
(input,
'(.{10,})(.*?)\1+',
'\1') "Less one repetition"
from tablename tn where ...;
我相信通过一些巧妙的方法,这可以被扩展以满足您的情况。
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
REPLACE
函数不在SQL99标准中,但大多数DBMS都支持它。我在这里进行了测试,并且它可以在MySQL、PostgreSQL、SQLite、Oracle和MS SQL Server中使用。在我看来,你可能正在超出SQL的能力/设计范围。你是否可以在数据层下方的层中以编程方式处理此情况,因为这种类型的情况可以更轻松地处理?
aaaaa
这样的东西呢?这是aa
两次后跟着a
(结果为aaa
)还是a
重复了 5 次,结果为a
? - Martin Ender