从postgres中的文本字符串中提取子字符串

时间:2015-09-08 20:50:53

标签: regex postgresql substring amazon-redshift

我正在尝试从postgresql中的文本字符串中提取子字符串。文本字符串的列名是URL,我使用子字符串函数来定义一个只返回我想要的部分的正则表达式:

SELECT
substring('user_latitude=.*user_' from URL)
FROM my_table
limit 10

当我执行此查询时,我会收到以下回复:

  

SQL错误[XX000]:错误:未实现    细节:

           

错误:未实现    代码:1001    context:'false' - 未实现的函数子字符串(文本,文本) - 改为使用REGEXP_SUBSTR    查询:258128    location:cg_expr.cpp:4265    过程:padbmaster [pid = 52019]

           

org.postgresql.util.PSQLException:错误:未实现    细节:

           

错误:未实现    代码:1001    context:'false' - 未实现的函数子字符串(文本,文本) - 改为使用> REGEXP_SUBSTR    查询:258128    location:cg_expr.cpp:4265    过程:padbmaster [pid = 52019]

     

但是,REGEXP_SUBSTR似乎不是本机函数,并且不起作用。

有没有办法从POSTGRES中的字符串中提取值?

由于

1 个答案:

答案 0 :(得分:4)

由于您运行的Amazon Redshift是基于Postgres 8.0.2以及Postgres函数is not supported构建的,因此最好查看documentation以查看实际可用的内容

SUBSTRING函数的签名与您使用它的方式不同,它应该是这样的:

select
substring(URL from 14)
from my_table
limit 10

这将从第14个字符到结尾产生URL的部分。

或者,如果不支持此版本的SUBSTRING,请尝试使用建议的REGEXP_SUBSTR

select
regexp_substr(URL, '=.*')
from my_table
limit 10

这会从' ='返回URL的部分。向前。