繁体   English   中英

错误:function regexp_like(字符变化,未知)不存在

[英]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')

我尝试用LIKEREGEXP_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_MATCHESREGEXP_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM