简体   繁体   English

在SQL中整个列的两个定界符之间提取值

[英]Extracting values between two delimiters for an entire column in SQL

I am looking for a way to extract all substrings between two delimiters over an entire column.I have found ways to do this for each string separately, but I need something I can apply over the entire column. 我正在寻找一种提取整个列中两个定界符之间的所有子字符串的方法,我已经找到了分别为每个字符串执行此操作的方法,但是我需要一些可以应用于整个列的方法。

For example if I have a column called "NAMES" that contains the below values: 例如,如果我有一个名为“ NAMES”的列,其中包含以下值:

  • 1235_brandon_098410090 1235_brandon_098410090
  • 1242353_sam_1920420101222 1242353_sam_1920420101222
  • 134214_kristein_39402384 134214_kristein_39402384

I want my output to be 我希望我的输出是

  • brandon 布兰登
  • sam SAM
  • kristein kristein

how do I do this? 我该怎么做呢?

I've tried this: regex_substr(names,'_(.*?)_' 我已经尝试过:regex_substr(names,'_(。*?)_'

Query Error: error: function regex_substr(character varying, unknown) does not exist 查询错误:错误:函数regex_substr(字符变化,未知)不存在

In MySQL, I think you can use substring_index() : 在MySQL中,我认为您可以使用substring_index()

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

This extracts the second value delimited by underscores, which is what all the sample data suggests is needed. 这将提取由下划线定界的第二个值,这是所有样本数据提示所需要的。

EDIT: 编辑:

Your error message looks like Postgres. 您的错误消息看起来像Postgres。 This is the equivalent in Postgres: 这在Postgres中是等效的:

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

In Postgres, you can use substring() with a pattern as well: 在Postgres中,您也可以将substring()与模式一起使用:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM