![](/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.