oracle只匹配中文,Oracle 实现 一个关键字 匹配多个 字段
有这么一个需求,满足只有一个输入框的条件下,支持不同数据列的搜索结果。
说白了,就是这个 输入框 既可以用来 搜索姓名,也可以搜索 年龄,地址等。
分析:
一般情况下,我们的一个输入框对应 数据库 的某一列信息的搜索,比如,要搜索姓名为 ‘李’ 姓开头的,那么对应的 sql 就是
where name like '李%'
但是,现在输入框有了不确定性,不知道用户到底会输入什么,导致我们后台的 sql 不知道该如何对应了,
比如,用户输入 18,很明显,用户是想搜索 年龄为 18 的用户,如果 后台sql 还是 where name like '18%',那么就会 搜索不到内容了。
方案一:
我们可以用 or 这种关键字来实现 多字段匹配,
比如:where name like '%搜索内容%' or age like '%搜索内容%'
这种方案对于 搜索字段比较 少的可以尝试,但是效率不高。
方案二:推荐
我们可以换一种思路
假设我们的数据库每一行都有一个完整的列 (colum),这个列的内容为 该行所有字段的内容。
那么我们搜索的sql 的可以改写为 where colum like '%搜索内容%'
这样 不论搜索 姓名 ,还是 年龄,地址 等,我们都可以查到。
既然到这里了,我相信你已经明白该怎么做了。
其实,就是用 sql 把需要可能 被用户搜索的 数据库字段拼接 起来,然后再 like '%搜索内容%' 就可以了。
oracle 做法
可以采用 instr() 函数,这里说下 INSTR()函数的作用
INSTR(参数1,参数2)其实是一个查找字符串的函数,返回的是字符串查找的位置,它有两个参数都是字符类型,如果找到则返回参数2在参数1中的位置,如果没有找到则返回 0。
SELECT INSTR('abcde', 'a') FROM DUAL;
--------------------------------------------
1
--------------------------------------------
结果分析,因为a在abcde的第一个位置,所以返回1
SELECT INSTR('abcde', 'f') FROM DUAL;
--------------------------------------------
0
--------------------------------------------
结果分析,因为f在abcde串中找不到,所以返回0
这里 对比 like 与 instr() 函数, 如果对性能 要求比较严格的 童鞋,记得来这里 用 instr () 来 替换 like 关键字
colum like '%搜索内容%'
等价于
instr(colum, '搜索内容', 1, 1)>0
colum like '搜索内容%'
等价于
instr(colum, '搜索内容', 1, 1)=1
colum like '%搜索内容'
等价于
instr(colum, '搜索内容', 1, -1)=length(colum)-length('搜索内容')+1
sql:
oracle || 代表拼接多个 数据库列
一般情况:where instr(姓名||年龄||地址,'搜索内容',1,1) > 0
如果两个数据列相邻,采用 ',' 分割,防止搜索到不匹配内容:
where instr(姓名|| ',' || 年龄|| ',' || 地址 ,'搜索内容',1,1) > 0
如果字段为空,可以用 nvl (字段名,''),来处理,他的意思是 用 ‘’代替 空的内容
mysql
concat 拼接多个数据库 列
instr 查询
where instr (concat(姓名,年龄,地址),'搜索内容') > 0
oracle只匹配中文,Oracle 实现 一个关键字 匹配多个 字段相关推荐
- oracle字符串只截取中文,Oracle提取字符串中“汉字”串的解决办法
我们在实际工作中常常要使用去特殊字符的功能,特别是插入到数据库中的数据,我们为了保证数据的质量,往往需要对数据进行清洗, 我们在实际工作中常常要使用去特殊字符的功能,特别是插入到数据库中的数据,我们为 ...
- php 正则匹配中文标点,JavaScript_js实现正则匹配中文标点符号的方法,本文实例讲述了js正则匹配中 - phpStudy...
js实现正则匹配中文标点符号的方法 本文实例讲述了js正则匹配中文标点符号的方法.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: js正则匹配中文标点符号 function ch ...
- oracle 查找非中文,Oracle中如何判断一个字符串是否含有汉字
看到网友问,怎么查询表中某个字段数据是不是包含了全角字符啊? 这个问题涉及到几个函数:to_single_byte.length和lengthb,我之前做开发的时候研究的是如何判断一个字符串中是否包含 ...
- oracle length函数中文,Oracle Length 和 Lengthb 函数说明 .(用来判断记录值里是否有中文内容)...
一.官网的说明 Purpose The LENGTH functionsreturn the length of char. LENGTH calculates length usingcharact ...
- oracle 怎么截取中文,oracle 截取字符(substr)
oracle 截取字符(substr),检索字符位置(instr) case when then else end语句使用 收藏 常用函数:substr和instr 1.SUBSTR(string,s ...
- oracle客户端设置中文,Oracle数据库之ORACLE客户端语言设置,SQLPLUS乱码解决方法
本文主要向大家介绍了Oracle数据库之ORACLE客户端语言设置,SQLPLUS乱码解决方法,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 客户端环境参数NLS_LANG = ...
- Python2和Python3正则匹配中文时的编码问题
Python2和Python3正则匹配中文时的编码问题 我们都会遇到这样的人,他们说话时是中文英文穿插使用的.也就是一句话中有中文也有英文,很多时候没有办法避免,尤其是说一些专业术语时,当然也有纯个人 ...
- python正则表达式匹配中文汉字
原文链接:python使用正则表达式匹配中文汉字 python正则匹配汉字,用来计算汉字字数,有两种方法: 1 [\u4e00-\u9fa5] 2 [^\x00-\xff] 两种匹配方式的区别: [\ ...
- java使用正则表达式匹配中文字符
匹配中文正则表达式:[\u4e00-\u9fa5] 工具匹配测试: 多个中文字符匹配: 可以看到上图是只匹配到单个字符,若作多字符匹配可以在表达式后加上"+"或者是"{1 ...
最新文章
- Nhibernate常见的错误
- 《游戏开发物理学(第2版)》一1.3 坐标系
- Java程序设计学习笔记(四)—— GUI
- python白名单验证-python脚本简单检测ip合法性并添加到白名单文件
- HTML的布局的小秘密
- 【Rational Rose使用笔记】用例图
- C/C++日志写入系统log(/var/log/syslog)
- Jsp页面用javascript加 滑动验证条
- ConcurrentHashMap笔记
- rsync和inotify实时同步配置 exclude排除多个文件夹
- iptables命令结构之目标
- C语言求m以内奇数的和
- 一个关于传奇3G游戏的感言
- dos命令实现无限弹窗
- eclipse插件下载速度慢,可以这样解决
- Python:罗马数字转整数
- python从网页提取文本_使用Python进行网页正文提取
- python bottle session-使用beaker让Facebook的Bottle框架支持session功能
- 《Total Commander:万能文件管理器》——第7.3节.总结与作业
- vue项目中获取当前设备 操作系统及版本,设备型号,ip,地区信息
热门文章
- Eclipse与github整合完整版
- 关闭弹出窗体,刷新父页面
- GridView数据导入Excel/Excel数据读入GridView
- [Leetcode][第491题][JAVA][递增子序列][回溯][RK算法]
- 什么是压缩感知?[简单概括]
- javame学习_从零基础自学Java教程:648集全网最新Java学习教程,一学就会
- C++中引用符的使用
- 902. 最短编辑距离
- sql查询php,SQL查询或PHP?
- 如何给ppt编辑页码_拒绝千篇一律:Word插入“侧边”页码,让文档别具一格!...