将 postgres 中除 ascii 32 和 ascii 0、13、27 之外的所有字符替换为 127 sql
Replace all characters except ascii 32 to 127 and ascii 0, 13, 27 in postgres sql
有没有什么函数可以替换postgres中除ascii 32到127和ascii 0,13,27之外的所有字符sql。我不想替换空格、换行符等。我想替换奇怪的字符,例如俱乐部标志、正方形或奇怪的星号。
我尝试像下面那样修改 regexp_replace 但它不起作用。
select regexp_replace('abc$wanto&tore9046move#special~04 chars', '[^\x00-\x7f]', '', 'g')
--This is giving error ERROR: 22021: invalid byte sequence for encoding "UTF8": 0x00
select *, regexp_replace('abc$wanto&tore9046move#special~04 chars', '[^[:ascii:]]', '', 'g')
--This one is taking everything beyond 255 also in the set.
非常感谢您的宝贵时间和帮助
尝试 unicode 范围:
select regexp_replace('abc$wanto&tore9046move#special~04 chars', '[\u0080-\u00ff]', '', 'g')
这将删除 128-255
ascii 范围内的任何字符。
你几乎是对的:
select regexp_replace('abc$wanto&tore9046move#special~04 chars', '[^\x00-\x7f]', '', 'g')
但空字节 \x00
在 PostgreSQL 字符串文字中无效,因此您必须从 \x01
开始。您想要的范围从 32 (0x20) 开始,因此请使用它加上 13 (0x0d) 和 27 (0x1b) 的一些特定内容:
select regexp_replace('abc$wanto&tore9046move#special~04 chars', '[^\x20-\x7f\x0d\x1b]', '', 'g')
或者,使用更有用的输入:
regress=> select regexp_replace('aáiï*∞ıb ', '[^\x20-\x7f\x0d\x1b]', '', 'g');
regexp_replace
----------------
ai*b
(1 row)
有没有什么函数可以替换postgres中除ascii 32到127和ascii 0,13,27之外的所有字符sql。我不想替换空格、换行符等。我想替换奇怪的字符,例如俱乐部标志、正方形或奇怪的星号。
我尝试像下面那样修改 regexp_replace 但它不起作用。
select regexp_replace('abc$wanto&tore9046move#special~04 chars', '[^\x00-\x7f]', '', 'g')
--This is giving error ERROR: 22021: invalid byte sequence for encoding "UTF8": 0x00
select *, regexp_replace('abc$wanto&tore9046move#special~04 chars', '[^[:ascii:]]', '', 'g')
--This one is taking everything beyond 255 also in the set.
非常感谢您的宝贵时间和帮助
尝试 unicode 范围:
select regexp_replace('abc$wanto&tore9046move#special~04 chars', '[\u0080-\u00ff]', '', 'g')
这将删除 128-255
ascii 范围内的任何字符。
你几乎是对的:
select regexp_replace('abc$wanto&tore9046move#special~04 chars', '[^\x00-\x7f]', '', 'g')
但空字节 \x00
在 PostgreSQL 字符串文字中无效,因此您必须从 \x01
开始。您想要的范围从 32 (0x20) 开始,因此请使用它加上 13 (0x0d) 和 27 (0x1b) 的一些特定内容:
select regexp_replace('abc$wanto&tore9046move#special~04 chars', '[^\x20-\x7f\x0d\x1b]', '', 'g')
或者,使用更有用的输入:
regress=> select regexp_replace('aáiï*∞ıb ', '[^\x20-\x7f\x0d\x1b]', '', 'g');
regexp_replace
----------------
ai*b
(1 row)