Oracle 判斷中文及全形 半形詳解

2021-10-03 04:41:18 字數 1303 閱讀 5984

思路:(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...