通过oracle的NLSSORT函数对汉字按照拼音排序,然后根据汉字的区间返回对应的首字母。

效果1,获取拼音简码:

效果2,获取姓名首字母:

创建函数:

/* 获取拼音简码函数 */
CREATE OR REPLACE FUNCTION GET_PYJM (P_NAME IN VARCHAR2)
RETURN VARCHAR2
AS
V_COMPARE VARCHAR2 (100);
V_RETURN VARCHAR2 (4000);
BEGIN
DECLARE
FUNCTION F_NLSSORT (P_WORD IN VARCHAR2)
RETURN VARCHAR2
AS
BEGIN
RETURN NLSSORT (P_WORD, 'NLS_SORT=SCHINESE_PINYIN_M');
END;
BEGIN
FOR I IN 1 .. LENGTH (P_NAME)
LOOP
V_COMPARE := F_NLSSORT (SUBSTR (P_NAME, I, 1)); IF V_COMPARE >= F_NLSSORT ('吖')
AND V_COMPARE <= F_NLSSORT ('驁')
THEN
V_RETURN := V_RETURN || 'A';
ELSIF V_COMPARE >= F_NLSSORT ('八')
AND V_COMPARE <= F_NLSSORT ('簿')
THEN
V_RETURN := V_RETURN || 'B';
ELSIF V_COMPARE >= F_NLSSORT ('嚓')
AND V_COMPARE <= F_NLSSORT ('錯')
THEN
V_RETURN := V_RETURN || 'C';
ELSIF V_COMPARE >= F_NLSSORT ('咑')
AND V_COMPARE <= F_NLSSORT ('鵽')
THEN
V_RETURN := V_RETURN || 'D';
ELSIF V_COMPARE >= F_NLSSORT ('妸')
AND V_COMPARE <= F_NLSSORT ('樲')
THEN
V_RETURN := V_RETURN || 'E';
ELSIF V_COMPARE >= F_NLSSORT ('发')
AND V_COMPARE <= F_NLSSORT ('猤')
THEN
V_RETURN := V_RETURN || 'F';
ELSIF V_COMPARE >= F_NLSSORT ('旮')
AND V_COMPARE <= F_NLSSORT ('腂')
THEN
V_RETURN := V_RETURN || 'G';
ELSIF V_COMPARE >= F_NLSSORT ('妎')
AND V_COMPARE <= F_NLSSORT ('夻')
THEN
V_RETURN := V_RETURN || 'H';
ELSIF V_COMPARE >= F_NLSSORT ('丌')
AND V_COMPARE <= F_NLSSORT ('攈')
THEN
V_RETURN := V_RETURN || 'J';
ELSIF V_COMPARE >= F_NLSSORT ('咔')
AND V_COMPARE <= F_NLSSORT ('穒')
THEN
V_RETURN := V_RETURN || 'K';
ELSIF V_COMPARE >= F_NLSSORT ('垃')
AND V_COMPARE <= F_NLSSORT ('擽')
THEN
V_RETURN := V_RETURN || 'L';
ELSIF V_COMPARE >= F_NLSSORT ('嘸')
AND V_COMPARE <= F_NLSSORT ('椧')
THEN
V_RETURN := V_RETURN || 'M';
ELSIF V_COMPARE >= F_NLSSORT ('拏')
AND V_COMPARE <= F_NLSSORT ('瘧')
THEN
V_RETURN := V_RETURN || 'N';
ELSIF V_COMPARE >= F_NLSSORT ('筽')
AND V_COMPARE <= F_NLSSORT ('漚')
THEN
V_RETURN := V_RETURN || 'O';
ELSIF V_COMPARE >= F_NLSSORT ('妑')
AND V_COMPARE <= F_NLSSORT ('曝')
THEN
V_RETURN := V_RETURN || 'P';
ELSIF V_COMPARE >= F_NLSSORT ('七')
AND V_COMPARE <= F_NLSSORT ('裠')
THEN
V_RETURN := V_RETURN || 'Q';
ELSIF V_COMPARE >= F_NLSSORT ('亽')
AND V_COMPARE <= F_NLSSORT ('鶸')
THEN
V_RETURN := V_RETURN || 'R';
ELSIF V_COMPARE >= F_NLSSORT ('仨')
AND V_COMPARE <= F_NLSSORT ('蜶')
THEN
V_RETURN := V_RETURN || 'S';
ELSIF V_COMPARE >= F_NLSSORT ('侤')
AND V_COMPARE <= F_NLSSORT ('籜')
THEN
V_RETURN := V_RETURN || 'T';
ELSIF V_COMPARE >= F_NLSSORT ('屲')
AND V_COMPARE <= F_NLSSORT ('鶩')
THEN
V_RETURN := V_RETURN || 'W';
ELSIF V_COMPARE >= F_NLSSORT ('夕')
AND V_COMPARE <= F_NLSSORT ('鑂')
THEN
V_RETURN := V_RETURN || 'X';
ELSIF V_COMPARE >= F_NLSSORT ('丫')
AND V_COMPARE <= F_NLSSORT ('韻')
THEN
V_RETURN := V_RETURN || 'Y';
ELSIF V_COMPARE >= F_NLSSORT ('帀')
AND V_COMPARE <= F_NLSSORT ('咗')
THEN
V_RETURN := V_RETURN || 'Z';
END IF;
END LOOP; RETURN V_RETURN;
END;
END;

Oracle提取中文字符串拼音首字母函数的更多相关文章

  1. 取字符串拼音首字母(js)

    //取字符串拼音首字母 function makePy(str) { if (typeof(str) != "string") throw new Error(-1, " ...

  2. php 获取中文字符拼音首字母

    //php获取中文字符拼音首字母 function getFirstCharter($str){ if(empty($str)){return '';} $fchar=ord($str{}); }); ...

  3. php获取中文字符拼音首字母

    //php获取中文字符拼音首字母 function getFirstCharter($str){ if(empty($str)){ return ''; } $fchar = ord($str{0}) ...

  4. js 获取中文的拼音首字母

    es6 + 模块化封装 "use strict"; module.exports = { //参数,中文字符串 //返回值:拼音首字母串数组 makePy (str) { if ( ...

  5. C#&Sql获取中文字符拼音首字母的方法

    C#获取字符拼音首字母,可以存储在数据库中以备将来按字母搜索的需求. public static string GetAc(string s) { try { string temp = Servic ...

  6. php 中文转拼音首字母问题

    <?php /* 中文汉字转拼音首字母的PHP简易实现方法. 要求: 只能是GB2312码表里面中文字符 转换得到字符串对应的拼音首字母大写. 用法: echo zh2py::conv('Chi ...

  7. sqlserver取字符串拼音首字母

    sqlserver 使用函数获取一个字符串的拼音首字母 create function dbo.fn_getpinyin ( @str nvarchar(max) ) returns nvarchar ...

  8. SqlServer 汉字转换拼音首字母函数

    CREATE function [dbo].[Func_GetPY](@str nvarchar(4000))returns nvarchar(4000)asbegin set @str=RTRIM( ...

  9. mysql 中将汉字(中文)按照拼音首字母排序

    因为数据库中可以设定表的编码格式,不同编码格式下,中文的排序有区别,下面分别介绍常用编码下的排序方法. 1.如果数据表的某字段的字符编码是 utf8_general_ci,排序写法: ORDER BY ...

随机推荐

  1. Linux 我的常用命令记录

    Linux下复制粘贴快捷键 1. 在终端下: 复制命令:Ctrl + Shift + C  组合键. 粘贴命令:Ctrl + Shift + V  组合键. 2. 在控制台下: 复制命令:Ctrl + ...

  2. cf C题

    题意:矩阵只包含0,1两种数字,给你一个矩阵A,另一个矩阵B,每一次可以从A中选出一个子矩阵,点击一次使得这个子矩阵的四个角的数字变成与原来相反的数,0变1,1变0.问你可不可以经过有限次的变换把矩阵 ...

  3. ZJOI 2017 树状数组(线段树套线段树)

    题意 http://uoj.ac/problem/291 思路 不难发现,九条カレン醬所写的树状数组,在查询区间 \([1,r]\) 的时候,其实在查询后缀 \([r,n]\) :在查询 \([l,r ...

  4. yii restful和一般路由共存

    <?php namespace app\controllers; use Yii; use yii\rest\ActiveController; /** * */ class TestContr ...

  5. 【搬运工】 Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

    登陆mysql的时候,出现了这个问题: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' ( ...

  6. js三元表达式

    条件 ? true的时候执行 : false时候执行 const x = 20; let answer; if (x > 10) { answer = 'greater than 10'; } ...

  7. vtime.hpp

    //vov #ifndef VTIME_HPP #define VTIME_HPP #include <cstdio> #include <ctime> #include &l ...

  8. PyQt5——高级控件

    PyQt5高级控件使用方法详见:https://blog.csdn.net/jia666666/article/list/4?t=1& PyQt5高级控件汇总: 1.QTableView 2. ...

  9. PHP json_decode为什么将json字符串转成数组是对象格式?

    eg. $a='[{\"img\":\"/uploads/agency/carimgs/5/15515954778091.jpg\"},{\"img\ ...

  10. Wincc报表+Listview使用

    listview在Wincc中可以作为显示的控件,对于列表表头的定义如下所示: list的命名,点击属性,在对象名称中对其定义: 有了listview的定义,就可以使用VBS对其表头的定义.具体代码如 ...