我有一个包含
等数据的表格列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
答案 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个段......