Postgres查询从给定文本中获取特定文本

问题描述 投票:0回答:1

我在列中的不同行中有这样的文本

  • xxxxxxxxxxx ab_88_2018 xxxxxx
  • ab_88_2018 xxxxxx
  • AB_88_2018 xxxxxx
  • ab_2018_88 XXXXXX

所以我只希望文本中的88个进入另一列。什么可以查询?

它不是88,而是那个位置的两个数字

postgresql extract
1个回答
0
投票

88总是两位数吗?如果是这样,这对我来说对Postgres和Redshift有用,我相信能得到你想要的东西:

SELECT
CASE
  WHEN LOWER(column)
    ~ '.*[a-z]{2}\_[0-9]{2}\_[0-9]{4}.*' THEN SPLIT_PART(column,'_',2)
  WHEN LOWER(column)
    ~ '[a-z]{2}\_[0-9]{4}\_[0-9]{2}.*' THEN LEFT(SPLIT_PART(column,'_',3),2)
    END As get_two_digit_number

〜(代字号)与LIKE类似,但允许您通过正则表达式进行模式匹配。请参阅regexr.com并将您的示例和代码粘贴到''之间以查看它的匹配情况

SPLIT_PART正在获取与模式匹配的字符串,然后在我选择的字符上将其分解,这里是'_'。最后一个数字是要返回的休息时间

以'xxxxxxxxxxx ab_88_2018 xxxxxx'为例,SPLIT_PART('xxxxxxxxxxx ab_88_2018 xxxxxx','',2)将返回'88',88是''之后的第二部分。如果您输入1,它将返回'_'之前的所有内容

© www.soinside.com 2019 - 2024. All rights reserved.