【问题标题】:Get certain number of characters after a delimiter in postgres在postgres中的分隔符后获取一定数量的字符
【发布时间】:2019-09-16 09:41:41
【问题描述】:

我需要从 db 表的详细字符串字段中提取一定数量的字符。

sub_str 不起作用,因为它要求位置,在这种情况下,每一行的位置都不同。

split_part 不起作用,因为它将返回分隔符后的完整部分,我们只需要 6 个字符

值示例:预期结果:

461/5-6 srj pt no 101 B up ml to dn ml                      101 B   
461/5-6 srj pt no107A up ml to up loop line                 107A
461/5-6 srj pt no 102 A dn ml to dn loop line               102 A
461/6-7 srj pt no 107 B up loop line up ml                  107 B
461/6-7 gf 10 dn loop to dead end                           10
461/7-8 srj of ds gf 13 B machine siding to up loop line    13 B
461/7-8 srj gf 10A machine siding to dn loop line           10A

等等。

【问题讨论】:

  • 这里的条件是什么?为什么在第 5 个字符串中只需要 10
  • 能否详细说明解析逻辑?
  • 你真的必须更详细地解释你的模式。我们应该告诉数据库调用什么?例如。为什么结果应该是10 而不是10 dn?目前最合适的模式可能是:第一个空格后的第一个数字字母。但我无法评估这封信的处理方式。如果它是下一个非空白字符,则只给出 A 或 B?
  • 不相关,但是:Postgres 9.1 是no longer supported,您应该尽快计划升级。

标签: sql postgresql postgresql-9.1


【解决方案1】:

这为我提供了所示示例的预期输出。但是,事实上,我不知道这是否适用于您的完整数据集,因为您描述的模式不够好。

我的想法: 在第一个空格之后有一些字母和空格。第一个数字后跟一个可选的空格和字母AB(如果存在):

demo:db<>fiddle

SELECT
    (regexp_matches(mytext, '^.* [a-z ]+(\d+ ?[AB]?)'))[1]
FROM
    texts

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多