我正在尝试从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中的字符串中提取值?
由于
答案 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
的部分。向前。