【问题标题】:SQL: is it possible to select the substring after the last delimiter within a varchar columnSQL:是否可以在 varchar 列中选择最后一个分隔符之后的子字符串
【发布时间】:2021-03-18 13:25:01
【问题描述】:

我正在尝试找到一种在 varchar 列的最后一个分隔符之后返回子字符串的方法。 varchar 列包含 csv 文件的内容,该文件在两个应用程序之间传输。 分隔符后的最后一个子串的长度不等,最多包含三个值,这样sql select right(csv_content,10) from CSV_LINE 未检索到所需的结果。

这是一个例子: 表:CSV_Line

ID             trans_date      User        CSV_content
----------    -----------     --------     ------------
1             2020-03-15      user1        123456|987654|""|""|test|string|05678, 08798
2             2020-03-15      user2        123456|987654|""|""|test|string|15678, 08797, 03532
3             2020-03-14      user3        123456|987654|""|""|test|string|543218

我想要做的是获取最后一个子字符串并将其分隔在逗号所在的位置,例如:

ID     value1          value2        value3
--    --------     ------------   ---------
1      05678           08798
2      15678           08797          03532
3      543218

我正在开发一个 IBM DB2 数据库。

有人可以帮忙吗?

【问题讨论】:

标签: sql db2 substring


【解决方案1】:

你可以用正则表达式来做到这一点:

with data (id,str) as (values
(1, '123456|987654|""|""|test|string|05678, 08798'),
(2, '123456|987654|""|""|test|string|15678, 08797, 03532'),
(3, '123456|987654|""|""|test|string|543218')
)
select id,n,regexp_substr(str,'[0-9]+', 1, n)
from   (
    select id,regexp_substr(str,'(?<=\|)[^|]+$')
    from   data
) x (id,str)
cross  join (values (1),(2),(3)) y (n)
where  n <= regexp_count(str,'[0-9]+')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多