0

我目前正在 PostgreSQL 中进行数据迁移。由于我是 posix 正则表达式的新手,因此我在使用简单模式时遇到了一些麻烦,希望您能提供帮助。

我想让一个正则表达式在列中的每个字母数字字符上拆分我的表,例如。当一列包含一个字符串时,'abc'我想将它分成 3 行:['a', 'b', 'c']. 我需要一个正则表达式

第二种情况稍微复杂一些,我想将表达式拆分'105AB'['105A', '105B'],我想复制字符串开头的数字并将表格拆分为大写字母,最后将数字与正好 1 连接起来大写字母。

我将使用的功能可能是regexp_split_to_table(string, regexp)

我故意提供很少的数据以免混淆任何人,因为我发布的是问题的本质。如果您需要更多信息,请发表评论。

4

1 回答 1

1

第一个已经被你解决了:

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
于 2013-06-10T11:49:02.703 回答