姓名首字母解析

2021-07-25 09:26:39 字數 1867 閱讀 8111

今天專案中有個需求,根據字母來來匹配使用者的姓名,查詢出姓名首字母是該字母的使用者

該功能類似於手機通訊錄的功能,快速定位到需要的聯絡人

網上搜尋了一下,借鑑了一種思路,下面說下在專案中的具體實現,

我主要是在資料庫層面進行的實現,具體如下:

1、首先定義乙個函式fristpinyin

create function `fristpinyin`(u_name varchar(255)) returns varchar(255) charset utf8

begin

declare v_return varchar(255);

set v_return = elt(interval(conv(hex(left(convert(u_name using gbk),1)),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');

return v_return;

end

該函式接收乙個字串引數u_name,返回乙個字串結果v_return

2、接著定義乙個函式pinyin

drop function if exists `pinyin`

delimiter ;;

create function `pinyin`(u_name varchar(255)) returns varchar(255) charset utf8

begin

declare v_compare varchar(255);

declare v_return varchar(255);

declare i int;

set i = 1;

set v_return = '';

while i < length(u_name) do

set v_compare = substr(u_name, i, 1);

if (v_compare != '') then

#set v_return = concat(v_return, ',', v_compare);

set v_return = concat(v_return, fristpinyin(v_compare));

#set v_return = fristpinyin(v_compare);

end if;

set i = i + 1;

end while;

if (isnull(v_return) or v_return = '') then

set v_return = u_name;

end if;

return v_return;

end

該函式接收乙個字串引數u_name,返回字串的首字母集合

示例:

select  *   from  t_user t   where  pinyin(t.`name`)   like  '%searchkey%';

查詢出所有首字母為searchkey的使用者

讓我們一起遨遊在**的海洋裡!

按姓名首字母檢索

解決方案 建乙個拼音表word encoding 存放 a z 每個字母 first spell 以這個字母開頭的第乙個漢字的編號 cbegin 和最後乙個漢字的編號 cend 如下圖所示 然後,直接使用sql語句查詢與所需查詢的表連線即可,如下 select tab.from tab,word e...

php 獲取姓名拼音首字母

url created by wangbinandi gmail.com at 2008 12 29 21 12 漢字拼音首字母工具類 注 英文的字串 不變返回 包括數字 eg abc123 abc123 中文字串 返回拼音首字元 eg.王小明 wxm 中英混合串 返回拼音首字元和英文 eg.我i我...

漢字姓名怎麼取到姓名的漢語拼音首字母

public class firstletteruti 二十六個字母區間對應二十七個端點 gb2312碼漢字區間十進位制表示 private static int table new int 27 對應首字母區間表 private static char initialtable 初始化 stati...