在mysql 裡實現查詢漢字的拼音首字母

2021-08-22 14:20:19 字數 2812 閱讀 8209

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',-19775,-19219),

('d',-19218,-18711),

('e',-18710,-18527),

('f',-18526,-18240),

('g',-18239,-17923),

('i',-17922,-17418),

('j',-17417,-16475),

('k',-16474,-16213),

('l',-16212,-15641),

('m',-15640,-15166),

('n',-15165,-14923),

('o',-14922,-14915),

('p',-14914,-14631),

('q',-14630,-14150),

('r',-14149,-14091),

('s',-14090,-13319),

('v',-13318,-12839),

('w',-12838,-12557),

('x',-12556,-11848),

('y',-11847,-11056),

('z',-11055,-10247);

2、建立mysql 函式

drop function if exists hzcode;

delimiter //

create function hzcode (s char(255)) returns char

begin

declare hz_code int;

declare hz_py char;

set hz_code = ord(substring(s,1,1))*256+ord(substring(s,2,1))-65536 ;

select py into hz_py from pyk where hz_code>=pyk.hz1 and hz_code<=pyk

.hz2;

return hz_py;

end//

delimiter ;

3、先測試一下

mysql> select hzcode('南海龍王');

+--------------------+

| hzcode('南海龍王') |

+--------------------+

| n |

+--------------------+

1 row in set (0.00 sec)

4、建立個測試表

drop   table   if   exists  `f1`;

create table f1 (

name varchar(30),

pykey varchar(1)

);insert into f1(name) values

('張三'),

('李四'),

('王五'),

('趙六'),

('錢七');

5、測試

mysql> select * from f1;

+------+-------+

| name | pykey |

+------+-------+

| 張三 | null |

| 李四 | null |

| 王五 | null |

| 趙六 | null |

| 錢七 | null |

+------+-------+

5 rows in set (0.00 sec)

mysql> update f1 set pykey = hzcode(name);

query ok, 5 rows affected (0.05 sec)

rows matched: 5 changed: 5 warnings: 0

mysql> select * from f1;

+------+-------+

| name | pykey |

+------+-------+

| 張三 | z |

| 李四 | l |

| 王五 | w |

| 趙六 | z |

| 錢七 | q |

+------+-------+

5 rows in set (0.00 sec)

這樣就很方便地在mysql裡查詢漢字的首字母了。 類似地也可以直接在mysql得到漢字拼音。 不過需要拼音表,函式寫法也不一樣。

Mybatis實現查詢的分頁功能

語法 limit子句可以被用於強制 select 語句返回指定的記錄數。limit接受乙個或兩個數字引數。引數必須是乙個整數常量。如果給定兩個引數,第乙個引數指定第乙個返回記錄行的偏移量,第二個引數指定返回記錄行的最大數目。如 select from table limit 1,10 檢索記錄行2 ...

12 5 4 在 C 中實現查詢運算子

12.5.4 在 c 中實現查詢運算子 當我們在清單 12.14 中,討論序列和分析 selectmany 操作時,已經看到如何把 c 查詢轉換為方法呼叫。我們將只支援查詢以 select 子句結尾,而忽視那些僅對集合有用的情況,比如分組。這意味著,我們就需要實現 select 擴充套件方法。我們已...

Mysql實現查詢5分鐘之前的資料

在做交易專案的時候需要乙個定時補償來把交易異常失敗但是能繼續跑的交易繼續跑下去,要求是5分鐘跑一次程式,邏輯比較簡單,就貼乙個查詢語句吧 select from 表名 t where 條件一 and 條件二 and t.時間 concat date format date sub now inter...