前言

Oracle数据库模糊查询数据,可以用like关键字;

但是,业务上有时候需要根据拼音首字母模糊查询某个字段,这时候考虑的点就比较多了

问题解决

解决方法有3种:

1. 表中添加一个字段表示拼音首字母

在表中增加一个字段,用于存储客户姓氏第一个字拼音的首字母。以后查询直接 name like  '%name%' 就OK了。 但是这样做的话不利于维护数据,而且业务上要求模糊查询的字段过多的话,需要添加更多的字段满足需求;

2.利用gb2312编码

利用gb2312的编码,比如以a开头的为 B0A1 到 B0C4 那么查询直接 select * from Table where substr(name,0,1) between 'B0A1' and 'B0C4'  就能直接把所需数据查询出来了。 不知此方法是否可行,因为现在数据库的编码是utf-8,不能适用

3.利用oracle 函数,将传入的姓名转成所需的姓氏拼音首字母

CREATE OR REPLACE FUNCTION F_TRANS_PINYIN_CAPITAL(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS
V_COMPARE VARCHAR2(100);
V_RETURN VARCHAR2(4000);   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;

使用该函数方式:

可以先取出姓名,然后取汉字的首字母,即可用来作为查询条件

select t.name from table_name t where f_trans_pinyin_capital(t.name) = 'ls';

参考文献:

[1].https://blog.csdn.net/wangheid/article/details/5288216

[2].https://www.cnblogs.com/telwanggs/p/6855491.html

Oracle——根据拼音首字母模糊查询某个字段相关推荐

  1. mysq根据首字母模糊检索,拼音首字母模糊查询名称

    Mysql 数据库根据拼音首字母模糊查询名称 前言 一.导入数据库 二.使用SQL进行查询 总结 前言 当我们的项目运行了一段时间,突然增加个需求,要按照内容标题的首字母进行查询时,这时我们只需导入一 ...

  2. jquery easyui实现汉字拼音首字母模糊查询

    本片文章并非原创,而是将网上的方法整理了一下:网上给出的代码不一定完全适合自己的项目,具体的要更加自己的情况修改: 不要直接复制粘贴代码,这样是行不通的:自己要理解前人这样实现的目的和原理 在实现这个 ...

  3. combotree按首字母模糊查询

    首先根据网上搜索的方法为combotree增加query的方法: //combotree首字母模糊查询 (function(){       $.fn.combotree.defaults.edita ...

  4. java 拼音模糊查询_java实现首字母模糊查询的功能

    ①,要实现首字母模糊匹配,首先我们需要得到你要搜索内容的首字母,对于java来说,有一个非常实用的包:pinyin4j.jar. 这个拼音包中的PinyinHelper 方法可以得到String的首字 ...

  5. java 首字母检索_java实现首字母模糊查询的功能

    ①,要实现首字母模糊匹配,首先我们需要得到你要搜索内容的首字母,对于java来说,有一个非常实用的包:pinyin4j.jar. 这个拼音包中的PinyinHelper 方法可以得到String的首字 ...

  6. mysql查询汉字拼音首字母_MySQL查询汉字的拼音首字母实例教程

    最好的方法还是用 PHP 来取拼音首字母,在 MySQL 里新建一个字段来存放 php 里查询汉字的拼音首字母已经有很多参考的代码了. 现在给出在mysql 里实现的, 测试环境是mysql-5.0. ...

  7. mysql 拼音首字母_MySQL 获取某个字段的汉语拼音首字母 - 文章

    在做一个商城的时候,需要用户能有切换城市的功能,城市列表按照汉语拼音首字母排序,城市的数据是从国家统计局扒下来的,只有城市的编码和城市的名称,通过下面的 MySQL 函数,获取某个汉语的首字母. CR ...

  8. 拼音中文首字母大写查询

    最新的商城项目需要用到拼音首字母大写查询,首先想加个字段存中文拼音的,觉得太麻烦,还是用sql解决快一些,lz用的是mysql. 解决的思路就是创建个函数调用,如果用工具navicat,则可以建立如下 ...

  9. 【Solr】 solr对拼音搜索和拼音首字母搜索的支持

    问:对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输入拼音和拼音首字母就给出商品的信息,怎么办呢? 实现方式有2种,但是他们其实是对应的.  用lucene实现 1.建索引, 多建一个索引字段 ...

最新文章

  1. hive金额怎么转换千位分隔符_金额字段加千位分隔符方法
  2. Windows Updateエラー 80072EE2
  3. 蓝桥杯java第六届决赛第一题--分机号
  4. 如何高效学习 Kubernetes 知识图谱?
  5. MongoDB安装步骤
  6. 制作系统盘,重装新系统。
  7. P4137-Rmq Problem/mex【莫队,分块】
  8. asp.net通过webservice调用java接口全过程_100-RPC、RMI、WebService、httpClient、跨域、集群部署...
  9. 【Hive的高级查询详】
  10. 算法-求两个有序数组两两相加的值最小的K个数
  11. 手机中必备的黑科技App,个个好用至极,现在的你一定需要
  12. SQL:MySQL创建、删除事件
  13. 用自定义IHttpModule实现URL重写 1
  14. Ubuntu 16.04 安装iNode客户端
  15. Microbiome:鸡肠道微生物宏基因集(张和平、魏泓、秦楠点评)
  16. 1.3 可移植性和标准
  17. java macd指标_Java 验证 MACD 底背离是否真的有效
  18. 面试官:说说你对 options 请求的理解
  19. 汇编 movl %gs:20, %eax 的作用
  20. 安费诺面试经验(已面试,等通知)

热门文章

  1. 动态水印跟踪去除_视频动态水印如何去除 视频中不定时出现的图片加文字广告如何尽量模糊处理...
  2. Mercury mw150us(8188eu) debian wireless driver
  3. 比心app源码,携带对象参数跳转页面
  4. 如何用excel做多元回归分析
  5. 一位研究生导师的肺腑之言
  6. 什么是“真AI相机”
  7. react-native-sound 音频
  8. 人脸识别行业应用状况及发展前景模式分析报告
  9. 俞敏洪:忍受孤独,失败,屈辱的能力是成就大业的必备条
  10. 类型BYTE,WORD与DWORD