pgsql解析字符串以获取某个位置后的字符串

时间:2014-09-17 14:49:47

标签: sql postgresql

我有一个包含

等数据的表格列
NA_PTR_51000_LAT_CO-BOGOTA_S_A
NA_PTR_51000_LAT_COL_M_A
NA_PTR_51000_LAT_COL_S_A
NA_PTR_51000_LAT_COL_S_B
NA_PTR_51000_LAT_MX-MC_L_A
NA_PTR_51000_LAT_MX-MTY_M_A

我想解析每个列值,以便获取column_B中的值。谢谢。

    COLUMN_A                        COLUMN_B

    NA_PTR_51000_LAT_CO-BOGOTA_S_A  CO-BOGOTA
    NA_PTR_51000_LAT_COL_M_A        COL
    NA_PTR_51000_LAT_COL_S_A        COL
    NA_PTR_51000_LAT_COL_S_B        COL
    NA_PTR_51000_LAT_MX-MC_L_A      MX-MC
    NA_PTR_51000_LAT_MX-MTY_M_A     MX-MTY

2 个答案:

答案 0 :(得分:0)

使用regexp_matches()搜索模式,例如' NA_PTR_51000_LAT _(。+)_'

这应该在NA_PTR_51000_LAT_之后返回下一个下划线之前的所有内容,这将与您要查找的模式匹配。

答案 1 :(得分:0)

我不确定Postgresql,我不能让SQL小提琴接受架构构建......

子串和长度可能会有所不同......

Select Column_A, substr(columN_A,18,length(columN_A)-17-4) from tableName

好的,那么: http://sqlfiddle.com/#!15/ad0dd/56/0

Select column_A, b
from (
  Select Column_A, b, row_number() OVER (ORDER BY column_A) AS k
  FROM (
    SELECT Column_A
           , regexp_split_to_table(Column_A, '_') b
    FROM test
       ) I 
     ) X
Where k%7=5

由内而外: 内部最多选择简单地将数据分成多个行_ 中间选择添加一个行号,以便我们可以使用mod运算符来查找第5个余数的所有出现。

这假设您所追踪的数据部分始终是第5段,并且总是有7个段......