今天做首字母查詢功能時呼叫的乙個函式

2022-09-11 01:45:22 字數 1649 閱讀 2040

#首字母查詢的資料庫函式

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...