#首字母查詢的資料庫函式delimiter $$
use`medical`$$
drop
function
ifexists
`getinitials`$$
create
function `getinitials`(in_string varchar(100)) returns
varchar(100
) charset utf8
begin
#定義臨時字串變數,用於接收函式中傳遞進來的字串值,這裡是in_string
declare tmp_str varchar(100) charset gbk default
'';
#定義臨時字串變數,用於存放函式中傳遞進來的字串值的第乙個字元
declare tmp_char varchar(2) charset gbk default'';
#tmp_str的長度
declare tmp_loc smallint
default0;
#初始化,將in_string賦給tmp_str
set tmp_str =
in_string;
#獲取tmp_str最左端的首個字元,注意這裡是獲取首個字元,該字元可能是漢字,也可能不是。
set tmp_char =
left(tmp_str,1
);#獲取字元的編碼範圍的位置,為了確認漢字拼音首字母是那乙個
set tmp_loc=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
);#判斷左端首個字元是多位元組還是單位元組字元,要是多位元組則認為是漢字且作以下拼音獲取,要是單位元組則不處理。如果是多位元組字元但是不在對應的編碼範圍之內,即對應的不是大寫字母則也不做處理,這樣數字或者特殊字元就保持原樣了
if (length(tmp_char)>
1and tmp_loc>
0and tmp_loc<
24) then
select elt(tmp_loc,'
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_char; #獲得漢字拼音首字元
endif
;return
tmp_char;#返回漢字拼音首字元
end$$
delimiter ;
通過getinitials(string)方法獲取函式首字母。
根據漢字的首字母生產拼音碼進行查詢
主要是在sql中實現 use xpos refer database go object userdefinedfunction dbo getletter script date 04 07 2012 09 22 25 set ansi nulls on goset quoted identifi...
在mysql 裡實現查詢漢字的拼音首字母
1 建立拼音首字母資料表 drop table if exists pyk create table pyk py varchar 1 hz1 int hz2 int insert into pyk py hz1 hz2 values a 20319,20284 b 20283,19776 c 19...
根據漢字的首字母生產拼音碼進行查詢
公司裡原先的 實在沒看懂。主要是在sql中實現 use xpos refer database go object userdefinedfunction dbo getletter script date 04 07 2012 09 22 25 set ansi nulls on goset qu...