mysql利用儲存過程實現中文首字母查詢

2021-08-14 13:55:36 字數 2355 閱讀 4639

#第一步 建立名稱為getpy的函式。
#對應definer=`root`@`localhost` 為自己的資料庫。
#使用方法 select u.id,u.name,upper(getpy(u.name)) as szm from user u where getpy(u.name) like upper(getpy(concat('%','fy','%')))
結果為:

#以下為mysql資料庫函式函式
delimiter $$

use `test`$$

drop function if exists `getpy`$$

create definer=`root`@`localhost` function `getpy`(in_string varchar(21845)) returns varchar(21845) charset utf8

begin

#擷取字串,每次做擷取後的字串存放在該變數中,初始為函式引數in_string值

declare tmp_str varchar(21845) charset gbk default '' ;

#tmp_str的長度

declare tmp_len smallint default 0;

#tmp_str的長度

declare tmp_loc smallint default 0;

#擷取字元,每次 left(tmp_str,1) 返回值存放在該變數中

declare tmp_char varchar(2) charset gbk default '';

#結果字串

declare tmp_rs varchar(21845)charset gbk default '';

#拼音字元,存放單個漢字對應的拼音首字元

declare tmp_cc varchar(2) charset gbk default '';

#初始化,將in_string賦給tmp_str

set tmp_str = in_string;

#初始化長度

set tmp_len = length(tmp_str);

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

while tmp_len > 0 do

#獲取tmp_str最左端的首個字元,注意這裡是獲取首個字元,該字元可能是漢字,也可能不是。

set tmp_char = left(tmp_str,1);

#左端首個字元賦值給拼音字元

set tmp_cc = tmp_char;

#獲取字元的編碼範圍的位置,為了確認漢字拼音首字母是那乙個

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)>1 and tmp_loc>0 and 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_cc;

end if;

#將當前tmp_str左端首個字元拼音首字元與返回字串拼接

set tmp_rs = concat(tmp_rs,tmp_cc);

#將tmp_str左端首字元去除

set tmp_str = substring(tmp_str,2);

#計算當前字串長度

set tmp_len = length(tmp_str);

end while;

#返回結果字串

return tmp_rs;

end$$

delimiter ;

mysql儲存登入 MYSQL儲存過程實現使用者登入

create definer root function uc session login re son json,srvjson json returnsjson language sqlnotdeterministiccontainssql sql security definer commen...

利用儲存過程實現資料分頁

利用ms sql2000的儲存過程實現資料分頁讀取,可簡化讀取的資料量。本過程的優點在於,輸入的sql語句沒有限制條件,而且寫法和思路都很簡單明瞭。create procedure dbo pageshow sql varchar 8000 where語句 pagesize int 10,每頁的大小...

MYSQL利用事件和儲存過程實現執行定時任務

比如有如下需求 刪除某個表中當前時間距離日期字段 create date 大於8分鐘的所有記錄,每30s執行一次該操作。1.建立儲存過程test 刪除ljh test表中超過8分鐘的記錄 date add 增加 date sub 減少 month 月份 minute 分鐘 second 秒 例如 s...