Postgresql

如何刪除特殊字元,但替換空格?

  • May 18, 2021

我有一個帶有空格和特殊字元的字元串:ABC%$! DEF*& GHI

我想刪除所有特殊字元,但用下劃線替換空格: ABC_DEF_GHI

我有:

REGEXP_REPLACE(c.category_name, '[^\w]+','','g')

但這會刪除所有字元,包括空格。

首先執行空格到下劃線的replace(),其餘的將由您現有的表達式完成。

testdb=# select regexp_replace(replace('ABC%$! DEF*& GHI', ' ', '_'), '[^\w]+','','g');
regexp_replace 
----------------
ABC_DEF_GHI
(1 row)

如果有一個簡短的、可能的特殊字元的靜態列表,translate()通常要快得多:

test=> SELECT translate('ABC%$! DEF*& GHI', ' %$!*&', '_');
 translate  
-------------
ABC_DEF_GHI

每個列出的沒有替換的字元都被刪除。

否則,請考慮亞當的回答。

但我想你不想_在結果中領先或落後?去除雜訊字元可能會浮出水面。所以將結果提供給trim()

test=> SELECT translate('ABC%$! DEF*& GHI %', ' %$!*&', '_')
test-> , trim(translate('ABC%$! DEF*& GHI %', ' %$!*&', '_'), '_');
 translate   |    btrim    
--------------+-------------
ABC_DEF_GHI_ | ABC_DEF_GHI

引用自:https://dba.stackexchange.com/questions/291722