mysql 中取得漢字欄位的各漢字首字母

2021-06-18 12:00:17 字數 1778 閱讀 8057

set global log_bin_trust_function_creators = 1;

set foreign_key_checks=0;

-- ----------------------------

-- function structure for getpy

-- ----------------------------

drop function if exists `getpy`;

delimiter ;;

create definer=`root`@`%` function `getpy`(in_string varchar(65534)) returns mediumtext charset utf8

begin

declare tmp_str varchar(65534) charset gbk default '' ; #擷取字串,每次做擷取後的字串存放在該變數中,初始為函式引數in_string值

declare tmp_len smallint default 0;#tmp_str的長度

declare tmp_char varchar(2) charset gbk default '';#擷取字元,每次 left(tmp_str,1) 返回值存放在該變數中

declare tmp_rs varchar(65534) charset gbk default '';#結果字串

declare tmp_cc varchar(2) charset gbk default '';#拼音字元,存放單個漢字對應的拼音首字元

set tmp_str = in_string;#初始化,將in_string賦給tmp_str

set tmp_len = length(tmp_str);#初始化長度

while tmp_len > 0 do #如果被計算的tmp_str長度大於0則進入該while

set tmp_char = left(tmp_str,1);#獲取tmp_str最左端的首個字元,注意這裡是獲取首個字元,該字元可能是漢字,也可能不是。

set tmp_cc = tmp_char;#左端首個字元賦值給拼音字元

if length(tmp_char)>1 then#判斷左端首個字元是多位元組還是單位元組字元,要是多位元組則認為是漢字且作以下拼音獲取,要是單位元組則不處理。

select elt(interval(conv(hex(tmp_char),16,10),0xb0a1,0xb0c5,0xb2c1,0xb4ee,0xb6ea,0xb7a2,0xb8c1,0xb9fe,0xbbf7,0xbfa6,0xc0ac

,0xc2e8,0xc4c3,0xc5b6,0xc5be,0xc6da,0xc8bb,0xc8f6,0xcbfa,0xcdda ,0xcef4,0xd1b9,0xd4d1),

'a','b','c','d','e','f','g','h','j','k','l','m','n','o','p','q','r','s','t','w','x','y','z') into tmp_cc; #獲得漢字拼音首字元

end if;

set tmp_rs = concat(tmp_rs,tmp_cc);#將當前tmp_str左端首個字元拼音首字元與返回字串拼接

set tmp_str = substring(tmp_str,2);#將tmp_str左端首字元去除

set tmp_len = length(tmp_str);#計算當前字串長度

end while;

return tmp_rs;#返回結果字串

end;;

delimiter ;

MySQL漢字欄位按拼音排序

utf 8編碼的資料庫,如果希望漢字字段按照拼音排序 select from students order byconvert name using gbk 我們的mysql使用latin1的預設字符集,也就是說,對漢字字段直接使用gbk內碼的編碼進行儲存,當需要對一些有漢字的字段進行拼音排序時 特...

mysql韓語排序 MySQL漢字欄位按拼音排序

我們的mysql使用latin1的預設字符集,也就是說,對漢字字段直接使用gbk內碼的編碼進行儲存,當需要對一些有漢字的字段進行拼音排序時 特別涉及到類似於名字這樣的字段時 預設無法通過order by關鍵字正確排序。經過網上查詢,網上的辦法大多是針對使用utf8字符集的資料庫,主要的方法有 1 直...

Mysql中各字段的取值範圍

tinyint 128 127 tinyint unsigned 0 255 allint 32768 32767 allint unsigned 0 65535 mediumint 8388608 8388607 mediumint unsigned 0 16777215 int 或 intege...