我需要檢測我的表是否有4字節的UTF-8字符,並刪除它們(如果有的話)。 我試過下面的SQL,但是它們返回錯誤ORA-12726: unmatched bracket in regular expression
。所有括號都匹配,所以錯誤是不正確的。如何在Oracle DB中使用4字節的UTF-8字符選擇行?
select REGEXP_REPLACE(asdaasd',
'['
|| UTL_I18N.RAW_TO_CHAR ('010000', 'UTF8')
|| '-'
|| UTL_I18N.RAW_TO_CHAR ('01FFFF', 'UTF8')
|| ']', '')
from dual;
select REGEXP_REPLACE('asdaasd',
'['
|| chr(to_number('010000', 'xxxxxx'))
|| '-'
|| chr(to_number('01FFFF', 'xxxxxx'))
|| ']', '')
from dual;
這些查詢有什麼問題?
你知道如何按字符代碼點範圍查找行嗎?
謝謝。但是,即使將範圍中的第二個字符擴展到'F48083BF',它也不會取代該Unicode符號。輸出仍然是'asdaasd' – Barataliba
@Barataliba要替換的字符不在指定的原始正則表達式的範圍之內,範圍擴展。 – collapsar
Oracle字符集「UTF8」與通常已知的編碼[UTF-8](https://en.wikipedia.org/wiki/UTF-8)不同**。 Oracle字符集UTF8表示[CESU-8](https://en.wikipedia.org/wiki/CESU-8)編碼。對於「真正的」UTF-8,你必須使用Oracle字符集「AL32UTF8」,因此你必須使用'UTL_I18N.RAW_TO_CHAR(...,'AL32UTF8')' –