问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql 自定义函数 如何传入中文参数

发布网友 发布时间:2022-04-08 04:32

我来回答

2个回答

热心网友 时间:2022-04-08 06:02

CREATE FUNCTION `fristPinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
BEGIN
    DECLARE V_RETURN VARCHAR(255);
    SET V_RETURN = ELT(INTERVAL(CONV(HEX(left(CONVERT(P_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
pinyin :此函数是将一个中文字符串对应拼音母的每个相连 (例如:"中国人"->ZGR)
复制代码 代码如下:

CREATE FUNCTION `pinyin`(P_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(P_NAME) do
        SET V_COMPARE = SUBSTR(P_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 = P_NAME;
    END IF;
    RETURN V_RETURN;
END

示例:
复制代码 代码如下:

mysql> select p.province, fristPinyin(p.province), pinyin(p.province) from province p;
+------------------+-------------------------+--------------------+
| province         | fristPinyin(p.province) | pinyin(p.province) |
+------------------+-------------------------+--------------------+
| 北京市           | B                       | BJS                |
| 天津市           | T                       | TJS                |
| 河北省           | H                       | HBS                |
| 山西省           | S                       | SXS                |
| 内蒙古自治区     | N                       | NMGZZQ             |
+------------------+-------------------------+--------------------+
5 rows in set

热心网友 时间:2022-04-08 07:20

中文看做字符串处理传入即可。
比如创建hello函数,传入'你好'
mysql> CREATE FUNCTION hello (s CHAR(20))
mysql> RETURNS CHAR(50) DETERMINISTIC
-> RETURN CONCAT('Hello, ',s,'!');
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT hello('你好');
+----------------+
| hello('world') |
+----------------+
| 你好! |
+----------------+
1 row in set (0.00 sec)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
上市就跌的股票为什么 为什么新股都会暴跌 为什么新股上市都跌 身上有烧伤的伤疤怎么去除 石榴皮发霉还能吃吗?新鲜石榴的保存方法有哪些? 5岁上瑞思和英孚哪个好 瑞思和英孚哪个好?上过课后来说说各自的优缺点 瑞思和英孚哪个好?上过课后来分享各自的优缺点 怎么当历史老师 中学历史老师需求状况 荣耀V10手机系统无法下载更新或更新下载进度一直为0%? 阅读和浏览是一个意思吗? 阅览词语的意思 荣耀60卡顿,真拉? 华为荣耀6下载进度条看不到 苹果11怎么延长数秒钟拍照? 手机连接wifi网速慢? 沈阳北站附近有农商银行吗 我新买个手机 ,连到WiFi网速非常慢,其他手机都很快,这是什么原因? 四川南充恒健实业有限公司怎么样? 广东恒健云侨资本投资有限公司怎么样? 广州恒健大健康产业有限公司怎么样? 恒健氧乐多是什么公司? 广东恒健制药有限公司怎么样? 厦门恒健财富管理有限公司怎么样? 广东恒健资产管理有限公司怎么样? 中联重科? 贵糖股份重组信息真实吗? 拜托给我找一片写景的日记,200字,景点要在洛阳,最好是写秋天的,希望快点!拜托了 !!!! 装修房子颜色怎么搭配啊 荣耀手机下载进度在哪 泰国青柠檬和一般的青柠檬一样么 华为荣耀6手机删除了游戏想要恢复游戏进度有什么办法 宝格丽没有发票还能回收吗 开架借阅与开架阅览的区别 各自的意思 越南青柠和泰国青柠有什么区别 中医杜仲和菊花有什么作用 系统更新了之后,三星输入法不见了,无法打字 哪里回收宝格丽戒指奢之屋全国连锁 杜仲茶可以同菊花能混在一起泡吗 华为荣耀3c2g移动版下载东西时,为何没下载进度了呀! 毛泽东十六字令三首翻译 华为荣耀6手机更新进度条就剩一点不动了怎么回事 毛泽东《十六字令三首》的译文! 1949年10月1日出生的政界和商界的社会名人都有谁? 生与十二月八日的名人? 安卓转苹果怎么查看进度 十六字令三首的翻译 十六字令三首翻译 win10系统进不了桌面怎么办