数据来源:
测试demo
demo1
中文2产出:
demo
demo1
2我试着select regexp_replace('测试中文demo','[\u0391-\uFFE5]','') from dual,但没有效果。和\w包括中国人,所以不要使用[^\w]。
现在我可以想到select regexp_replace('测试中文demo','[^a-zA-Z0-9\s]','') from dual了。
有更好的方法吗?
发布于 2016-07-20 09:51:00
请参阅http://debugguru.blogspot.com/2011/11/searching-unicode-characters-in-oracle.html
通常,使用正则表达式,您可以使用
\x或\u和十六进制代码来搜索任何字符。例如,\x20将匹配空间。但甲骨文中的REGEXP_LIKE不支持\x。您需要使用 function将代码转换为等效字符,然后将其与REGEXP_LIKE一起使用。例如REGEXP_LIKE(source,'[' ||unistr('\0020')|| ']');
所以,你需要一些东西
select regexp_replace('测试中文demo', '[' || unistr('\0391') || '-' || unistr('\9FA5') || ']','') from dual注:一个更好的中文版本应该包括以下所有的范围:
----------------------------------------------------------------------------------
|Block | ES6 Range | ES5 Range |
|---------------------------------------------------------------------------------|
|CJK Unified Ideographs | 4E00-9FFF | \u4E00-\u9FFF |
|CJK Unified Ideographs Extension A | 3400-4DFF | \u3400-\u4DFF |
|CJK Unified Ideographs Extension B | 20000-2A6DF | \uD840\uDC00-\uD869\uDEDF|
|CJK Unified Ideographs Extension C | 2A700–2B73F | \uD869\uDF00-\uD86D\uDF3F|
|CJK Unified Ideographs Extension D | 2B740–2B81F | \uD86D\uDF40-\uD86E\uDC1F|
|CJK Unified Ideographs Extension E | 2B820–2CEAF | \uD86E\uDC20-\uD873\uDEAF|
|CJK Compatibility Ideographs | F900-FAFF | \uF900-\uFAFF |
|CJK Compatibility Ideographs Supplement | 2F800-2FA1F | \uD87E\uDC00-\uD87E\uDE1F|
----------------------------------------------------------------------------------所以,试试
select regexp_replace('测试中文demo','[' || unistr('\4E00') || '-' || unistr('\9FFF') || unistr('\3400') || '-' || unistr('\4DFF') || unistr('\D840\DC00') || '-' || unistr('\D869\DEDF') || unistr('\D869\DF00') || '-' || unistr('\D86D\DF3F') || unistr('\D86D\DF40') || '-' || unistr('\D86E\DC1F') || unistr('\D86E\DC20') || '-' || unistr('\D873\DEAF') || unistr('\F900') || '-' || unistr('\FAFF') || unistr('\D87E\DC00') || '-' || unistr('\D87E\DE1F') || ']','') from dual
发布于 2016-07-20 09:28:21
使用REGEXP_REPLACE
SELECT REGEXP_REPLACE(YOURFIELD,'[^a-zA-Z'']','') AS outputfield
FROM YOURTABLEhttps://stackoverflow.com/questions/38477317
复制相似问题