【问题标题】:Extracting values between two delimiters for an entire column in SQL在 SQL 中提取整个列的两个分隔符之间的值
【发布时间】:2019-12-29 16:45:09
【问题描述】:

我正在寻找一种方法来提取整个列上两个定界符之间的所有子字符串。我已经找到了分别为每个字符串执行此操作的方法,但我需要一些可以应用于整个列的方法。

例如,如果我有一个名为“NAMES”的列,其中包含以下值:

  • 1235_brandon_098410090
  • 1242353_sam_1920420101222
  • 134214_kristein_39402384

我希望我的输出是

  • 布兰登
  • 山姆
  • 克里斯汀

我该怎么做?

我试过这个: regex_substr(names,'_(.*?)_'

查询错误:错误:函数 regex_substr(字符变化,未知)不存在

【问题讨论】:

    标签: sql regex postgresql substring postgresql-9.6


    【解决方案1】:

    在MySQL中,我认为你可以使用substring_index():

    select substring_index(substring_index(names, '_', 2), '_', -1)
    

    这将提取由下划线分隔的第二个值,这是所有示例数据所需要的。

    编辑:

    您的错误消息看起来像 Postgres。这是 Postgres 中的等价物:

    select v.*, split_part(names, '_', 2)
    from (values ('1242353_sam_1920420101222')) v(names);
    

    在 Postgres 中,您也可以将 substring() 与模式一起使用:

    select v.*, substring(names from '[A-Za-z]+')
    

    【讨论】:

    • 查询错误:错误:函数 substring_index(字符变化,未知,整数)不存在我不断收到此错误。我正在使用 postgresql v 9.6
    • @jayzers27 。 . . substring_index() 基本上永远是 MySQL 的一部分 (dev.mysql.com/doc/refman/8.0/en/…)。该错误看起来不像 MySQL 错误。
    • 我工作得很好。你能在帖子中发布你的查询吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2012-06-23
    相关资源
    最近更新 更多