我需要处理以下问题,搜索后我无法找到我正在寻找的内容:
我们说我有一个列可能有也可能没有字母数字字符串
SKU
-----
12345ABC
12345-Abc
12345-Ab23
12345
我想闯入
SKU | BATCH
------------------
12345 | ABC
12345 | Abc
12345 | Ab23
12345 | NULL
使用PostgreSQL 9.4+我已经尝试了string
和sub_string
方法,但我没有得到我希望实现的结果。任何想法?
答案 0 :(得分:1)
您可以使用substring function。
with a (SKU) as (values('12345ABC'), ('12345-Abc'), ('12345-Ab23'), ('12345'))
select substring(sku from '^\d+'), substring(sku from '[a-zA-Z][a-zA-Z0-9]*$') from a;
substring | substring
-----------+-----------
12345 | ABC
12345 | Abc
12345 | Ab23
12345 |
(4 rows)
答案 1 :(得分:0)
您可以使用regexp_matches:
with a (SKU) as (values('12345ABC'), ('12345-Abc'), ('12345-Ab23'), ('12345'))
select res[1], res[2]
from (
SELECT regexp_matches(SKU, '(\d+)[^[:alnum:]]*([[:alnum:]]+)?') res
FROM a
) y;