![](/img/trans.png)
[英]PostgreSQL ERROR: function to_tsvector(character varying, unknown) does not exist
[英]ERROR: function regexp_like(character varying, unknown) does not exist
我有这个SQL
查询,我正在使用Postgresql
编写。
select * from cdr_data
where REGEXP_LIKE(identifiant,'^73')
and REGEXP_REPLACE(callednumber,'^256','') ~ '^73'
它给了我以下错误:
[Err] ERROR: function regexp_like(character varying, unknown) does not exist
LINE 2: and regexp_like(identifiant,'^73')
我尝试用LIKE
和REGEXP_MATCHES
替换REGEXP_LIKE
,但它们不起作用。
可能是什么问题呢?
PostgreSQL相当于regexp_like(identifiant,'^73')
可identifiant ~ '^73'
您是否尝试过使用SIMILAR TO
运算符?
PostgreSQL文档中的一些片段:
a. `select 'abc' SIMILAR TO '(a|d)%';`
b. `select 'def' SIMILAR TO '(a|b|c)%';`
声明a返回t
(true),因为'abc'以'a'或'd'开头。 语句b返回f
(false),因为'def'不以'a'或'b'或'c'开头。
事实上,您可以使用以下功能之一
value_or_colum_name ~ '<regex-expression>'
value_or_colum_name SIMILAR TO '<regex-expression>'
TEXTREGEXEQ(value_or_colum_name,'<regex-expression>')
所有这 3 种可能性是完全等价的。
REGEXP_LIKE
上不存在 REGEXP_LIKE 函数。 但是REGEXP_MATCHES
和REGEXP_REPLACE
存在。
这是一个使用~
和REGEXP_REPLACE
的命令,我用来在开始 SQL UPDATE
之前检查我的正则表达式是否正常工作。
SELECT communication
,REGEXP_REPLACE
(communication
,'(\d{3})(\d{4})(\d{5})'
,'***\1/\2/\3***'
) as ref
FROM mouvements
WHERE communication ~ '^\d{12}$'
这给出以下结果
comm ref
------------------------------------
303000167868 ***303/0001/67868***
121231357408 ***121/2313/57408***
321000204456 ***321/0002/04456***
最后的更新命令是
UPDATE mouvements
SET communication = NULL
,Ref_Structured = REGEXP_REPLACE(communication,'(\d{3})(\d{4})(\d{5})','***\1/\2/\3***')
WHERE communication ~ '^\d{12}$'
拆分列的另一个 SQL UPDATE
命令是 2
UPDATE mouvements
SET nom = REGEXP_REPLACE(nom,'^(.*)(REFERENCE DONNEUR D''ORDRE : )(.*)','\1')
,RefDonneur = REGEXP_REPLACE(nom,'^.*(REFERENCE DONNEUR D''ORDRE : )(.*)','\2')
where nom ~ 'REFERENCE DONNEUR D''ORDRE :'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.