posix regexp来拆分表
我目前正在PostgreSQL中进行数据迁移。由于我是posix正则表达式的新手,我在使用一个简单的模式时遇到了一些问题,非常感谢您的帮助 我想让一个正则表达式在一列中的每个字母数字字符上拆分我的表,例如,当一列包含字符串posix regexp来拆分表,regex,postgresql,posix,Regex,Postgresql,Posix,我目前正在PostgreSQL中进行数据迁移。由于我是posix正则表达式的新手,我在使用一个简单的模式时遇到了一些问题,非常感谢您的帮助 我想让一个正则表达式在一列中的每个字母数字字符上拆分我的表,例如,当一列包含字符串'abc'时,我想将其拆分为3行:['a','b','c']。我需要一个regexp 第二种情况稍微复杂一些,我想把一个表达式'105AB'拆分成['105A','105B'],我想复制字符串开头的数字,并按大写字母拆分表格,最后将数字与1个大写字母连接起来 我将使用的函数可能
'abc'
时,我想将其拆分为3行:['a','b','c']
。我需要一个regexp
第二种情况稍微复杂一些,我想把一个表达式'105AB'
拆分成['105A','105B']
,我想复制字符串开头的数字,并按大写字母拆分表格,最后将数字与1个大写字母连接起来
我将使用的函数可能是regexp\u split\u to\u table(string,regexp)
我故意提供很少的数据,以免混淆任何人,因为我发布的内容是问题的本质。如果您需要更多信息,请发表评论。您已经解决了第一个问题:
select regexp_split_to_table(s, ''), i
from (values
('abc', 1),
('def', 2)
) s(s, i);
regexp_split_to_table | i
-----------------------+---
a | 1
b | 1
c | 1
d | 2
e | 2
f | 2
在第二种情况下,您不会说数字是否总是第一个树字符:
select
left(s, 3) || regexp_split_to_table(substring(s from 4), ''), i
from (values
('105AB', 1),
('106CD', 2)
) s(s, i);
?column? | i
----------+---
105A | 1
105B | 1
106C | 2
106D | 2
对于可变数量的数字:
select n || a, i
from (
select
substring(s, '^\d{1,3}') n,
regexp_split_to_table(substring(s, '[A-Z]+'), '') a,
i
from (values
('105AB', 1),
('106CD', 2)
) s(s, i)
) s;
?column? | i
----------+---
105A | 1
105B | 1
106C | 2
106D | 2
第一个解决方案有效,感谢第二个,数值长度是可变的(1-3),但你的想法推动了我,我将尝试使用regexp_replace处理此问题,并可能在接下来的15分钟内解决此问题:)谢谢lot@fetta如果您还没有计算出来,请检查我编辑的答案。我以不同的方式完成了它:
regexp_replace(t2.oddzial,[~a-Za-z]+','')| | regexp_split_to_table(regexp_replace)(t2.oddzial,[0-9]+',''),'[~a-z]+','','')odd
其中t2.oddzial是我要拆分的列再次感谢:)