Postgresql
如何刪除特殊字元,但替換空格?
我有一個帶有空格和特殊字元的字元串:
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