簡體   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