有这么一个需求,满足只有一个输入框的条件下,支持不同数据列的搜索结果。

说白了,就是这个 输入框  既可以用来 搜索姓名,也可以搜索 年龄,地址等。

分析:

一般情况下,我们的一个输入框对应 数据库 的某一列信息的搜索,比如,要搜索姓名为 ‘李’ 姓开头的,那么对应的 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 实现 一个关键字 匹配多个 字段相关推荐

  1. oracle字符串只截取中文,Oracle提取字符串中“汉字”串的解决办法

    我们在实际工作中常常要使用去特殊字符的功能,特别是插入到数据库中的数据,我们为了保证数据的质量,往往需要对数据进行清洗, 我们在实际工作中常常要使用去特殊字符的功能,特别是插入到数据库中的数据,我们为 ...

  2. php 正则匹配中文标点,JavaScript_js实现正则匹配中文标点符号的方法,本文实例讲述了js正则匹配中 - phpStudy...

    js实现正则匹配中文标点符号的方法 本文实例讲述了js正则匹配中文标点符号的方法.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: js正则匹配中文标点符号 function ch ...

  3. oracle 查找非中文,Oracle中如何判断一个字符串是否含有汉字

    看到网友问,怎么查询表中某个字段数据是不是包含了全角字符啊? 这个问题涉及到几个函数:to_single_byte.length和lengthb,我之前做开发的时候研究的是如何判断一个字符串中是否包含 ...

  4. oracle length函数中文,Oracle Length 和 Lengthb 函数说明 .(用来判断记录值里是否有中文内容)...

    一.官网的说明 Purpose The LENGTH functionsreturn the length of char. LENGTH calculates length usingcharact ...

  5. oracle 怎么截取中文,oracle 截取字符(substr)

    oracle 截取字符(substr),检索字符位置(instr) case when then else end语句使用 收藏 常用函数:substr和instr 1.SUBSTR(string,s ...

  6. oracle客户端设置中文,Oracle数据库之ORACLE客户端语言设置,SQLPLUS乱码解决方法

    本文主要向大家介绍了Oracle数据库之ORACLE客户端语言设置,SQLPLUS乱码解决方法,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 客户端环境参数NLS_LANG = ...

  7. Python2和Python3正则匹配中文时的编码问题

    Python2和Python3正则匹配中文时的编码问题 我们都会遇到这样的人,他们说话时是中文英文穿插使用的.也就是一句话中有中文也有英文,很多时候没有办法避免,尤其是说一些专业术语时,当然也有纯个人 ...

  8. python正则表达式匹配中文汉字

    原文链接:python使用正则表达式匹配中文汉字 python正则匹配汉字,用来计算汉字字数,有两种方法: 1 [\u4e00-\u9fa5] 2 [^\x00-\xff] 两种匹配方式的区别: [\ ...

  9. java使用正则表达式匹配中文字符

    匹配中文正则表达式:[\u4e00-\u9fa5] 工具匹配测试: 多个中文字符匹配: 可以看到上图是只匹配到单个字符,若作多字符匹配可以在表达式后加上"+"或者是"{1 ...

最新文章

  1. Nhibernate常见的错误
  2. 《游戏开发物理学(第2版)》一1.3 坐标系
  3. Java程序设计学习笔记(四)—— GUI
  4. python白名单验证-python脚本简单检测ip合法性并添加到白名单文件
  5. HTML的布局的小秘密
  6. 【Rational Rose使用笔记】用例图
  7. C/C++日志写入系统log(/var/log/syslog)
  8. Jsp页面用javascript加 滑动验证条
  9. ConcurrentHashMap笔记
  10. rsync和inotify实时同步配置 exclude排除多个文件夹
  11. iptables命令结构之目标
  12. C语言求m以内奇数的和
  13. 一个关于传奇3G游戏的感言
  14. dos命令实现无限弹窗
  15. eclipse插件下载速度慢,可以这样解决
  16. Python:罗马数字转整数
  17. python从网页提取文本_使用Python进行网页正文提取
  18. python bottle session-使用beaker让Facebook的Bottle框架支持session功能
  19. 《Total Commander:万能文件管理器》——第7.3节.总结与作业
  20. vue项目中获取当前设备 操作系统及版本,设备型号,ip,地区信息

热门文章

  1. Eclipse与github整合完整版
  2. 关闭弹出窗体,刷新父页面
  3. GridView数据导入Excel/Excel数据读入GridView
  4. [Leetcode][第491题][JAVA][递增子序列][回溯][RK算法]
  5. 什么是压缩感知?[简单概括]
  6. javame学习_从零基础自学Java教程:648集全网最新Java学习教程,一学就会
  7. C++中引用符的使用
  8. 902. 最短编辑距离
  9. sql查询php,SQL查询或PHP?
  10. 如何给ppt编辑页码_拒绝千篇一律:Word插入“侧边”页码,让文档别具一格!...