思路:(1
) 去除特殊字元,避免 '全形' 字元,'《》' 等字元的影響(2
) 依據:'中文位元組長度 > 英文位元組長度'
with t_source_string as
-- 源字串
(select
1 id,
'12中文abc!!' str from dual union
allselect
2 id,
'34abc!!》' str from dual)
select t.
*from t_source_string t
where lengthb(regexp_replace(t.str,
'[[:punct:]]',''
))>
length(regexp_replace(t.str,
'[[:punct:]]',''
));
1. lengthb(
):"位元組" 長度,1 個字母 =
1 個位元組,1 個中文 =
2 個位元組。
length(
) :"字元" 長度,1 個字母 =
1 個字元,1 個中文 =
1 個字元。
2. to_single_byte(
'x'):將 x 轉換為 "半形"
to_multi_byte(
'x') :將 x 轉換為 "全形"
半形全形主要是針對 "標點符號" 來說的,全形標點佔兩個位元組,半形佔乙個位元組.
3. 特別的,如 "《"、"》"
select lengthb(
'《') a,
-- 2
length(
'《') b,
-- 1
lengthb(
'》') c,
-- 2
length(
'》') d -- 1
from dual;
-- '!':半形,1 個位元組
-- '!': 全形,2 個位元組
select lengthb(
'!') 半形位元組長度,
lengthb(
'!') 全形字節長度,
length(
'!') 半形字元長度,
length(
'!') 全形字符長度,
to_single_byte(
'!') 轉半形,
to_multi_byte(
'!') 轉全形
from dual;
全形半形判斷
半形範圍 u0000 u00ff,uff61 uff9f,uffe8 uffee 全形範圍 以下是判斷全形半形混合字串的位元組數是否超過指定的位元組數。半形被認為是乙個位元組 function isoverbytes s,maxbytes else else if uffe8 c c uffee e...
全形轉半形,半形轉全形,判斷字元是否為全形
全形轉半形的函式 dbc case 任意字串 半形字串 全形空格為12288,半形空格為32 其他字元半形 33 126 與全形 65281 65374 的對應關係是 均相差65248 public string todbc string input if c i 65280 c i 65375 c...
全形字符轉換為半形,判斷半形和全形
判斷字元是否英文半形字元或標點 32 空格 33 47 標點 48 57 0 9 58 64 標點 65 90 a z 91 96 標點 97 122 a z 123 126 標點 public static bool isbjchar char c 判斷字元是否全形字符或標點 全形字符 65248...