gpt4 book ai didi

oracle - 如何在 Oracle DB 中选择具有 4 字节 UTF-8 字符的行?

转载 作者:行者123 更新时间:2023-12-05 09:21:05 25 4
gpt4 key购买 nike

我需要检测我的表是否有 4 字节的 UTF-8 字符,如果有则删除它们。我尝试了以下 SQL,但它们返回错误 ORA-12726:正则表达式中不匹配的括号。所有括号都匹配,因此错误不正确。

select REGEXP_REPLACE(asd𠜎aasd', 
'['
|| UTL_I18N.RAW_TO_CHAR ('010000', 'UTF8')
|| '-'
|| UTL_I18N.RAW_TO_CHAR ('01FFFF', 'UTF8')
|| ']', '')
from dual;

select REGEXP_REPLACE('asd𠜎aasd',
'['
|| chr(to_number('010000', 'xxxxxx'))
|| '-'
|| chr(to_number('01FFFF', 'xxxxxx'))
|| ']', '')
from dual;

这些查询有什么问题?

你知道如何按字符代码点范围查找行吗?

最佳答案

您可以使用 the UNISTR function ; 𠜎 字符是 codepoint U+2070E ,在 UTF-16 中是 D841DF0E。如文档所述:

Supplementary characters are encoded as two code units, the first from the high-surrogates range (U+D800 to U+DBFF), and the second from the low-surrogates range (U+DC00 to U+DFFF).

这意味着您可以用以下方式表示它:

select unistr('\D841\DF0E') from dual;

UNISTR('\D841\DF0E')
--------------------
𠜎

然后您可以使用 UNISTR 来构造您的范围:

select REGEXP_REPLACE('asd𠜎aasd', 
'['
|| UNISTR('\D800\DC00')
|| '-'
|| UNISTR('\DBFF\DFFF')
|| ']', '')
from dual;

REGEXP_REPLACE('ASD𠜎AASD','['||UNISTR('\D800\DC00')||'-'||UNISTR('\DBFF\DFFF')||']','')
----------------------------------------------------------------------------------------
asdaasd

假设您要排除所有增补字符;如果焦点更窄,您可以调整范围。

关于oracle - 如何在 Oracle DB 中选择具有 4 字节 UTF-8 字符的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34720830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com