厦门行业网站建设,常德农科院网站,android开发工具箱,吉林企业网络推广方法有这么一个需求#xff0c;满足只有一个输入框的条件下#xff0c;支持不同数据列的搜索结果。说白了#xff0c;就是这个 输入框 既可以用来 搜索姓名#xff0c;也可以搜索 年龄#xff0c;地址等。分析#xff1a;一般情况下#xff0c;我们的一个输入框对应 数据库…有这么一个需求满足只有一个输入框的条件下支持不同数据列的搜索结果。说白了就是这个 输入框 既可以用来 搜索姓名也可以搜索 年龄地址等。分析一般情况下我们的一个输入框对应 数据库 的某一列信息的搜索比如要搜索姓名为 ‘李’ 姓开头的那么对应的 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的第一个位置所以返回1SELECT INSTR(abcde, f) FROM DUAL;--------------------------------------------0--------------------------------------------结果分析因为f在abcde串中找不到所以返回0这里 对比 like 与 instr() 函数 如果对性能 要求比较严格的 童鞋记得来这里 用 instr () 来 替换 like 关键字colum like %搜索内容%等价于instr(colum, 搜索内容, 1, 1)0colum like 搜索内容%等价于instr(colum, 搜索内容, 1, 1)1colum like %搜索内容等价于instr(colum, 搜索内容, 1, -1)length(colum)-length(搜索内容)1sqloracle || 代表拼接多个 数据库列一般情况where instr(姓名||年龄||地址,搜索内容,1,1) 0如果两个数据列相邻采用 分割防止搜索到不匹配内容where instr(姓名|| , || 年龄|| , || 地址 ,搜索内容,1,1) 0如果字段为空可以用 nvl (字段名,)来处理他的意思是 用 ‘’代替 空的内容mysqlconcat 拼接多个数据库 列instr 查询where instr (concat(姓名,年龄,地址),搜索内容) 0