Mysql函数FIND_IN_SET()的使用方法

Mysql函数FIND_IN_SET()的使用方法

https://www.cnblogs.com/gpfeisoft/p/5535450.html

有了FIND_IN_SET这个函数。我们可以设计一个如:一只手机即是智能机,又是Andriod系统的。

比如:有个产品表里有一个type字段,他存储的是产品(手机)类型,有 1、智能机,2、Andriod系统,3、小米系统,4、1000元以下

现在有条手机的记录即是1000元以下的,又是智能机,还是Andriod的系统。

type中以 4,1,2的格式存储.

那们我们如何用sql查找所有type中有4的1000元以下的手机呢,

这就要我们的find_in_set出马的时候到了.

先看MySQL手册中find_in_set函数的语法:

FIND_IN_SET(str,strlist)

假如字符串str 在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则   FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

mysql> SELECT FIND_IN_SET(‘b’,’a,b,c,d’);

+—————————-+

| FIND_IN_SET(‘b’,’a,b,c,d’) |

+—————————-+

|                          2 |

+—————————-+

1 row in set (0.00 sec)

用起来很简单

就以上面我说到的情况来举例:

以下为实际应用当中的SQL语句:

select * from mobile where FIND_IN_SET(‘4’,type);

这个就可以找出所有1000元以下手机的记录!

 

______________________________________________________________________________________________________________

查询表字段 pingid = (1,2,3,)

 

SELECT * FROM `linkinfo` WHERE `pingid` REGEXP ‘{id},’ AND `pingid` NOT REGEXP ‘[[:alnum:]]+{id},’   使用上面的语句,可以查询出来

 

用FIND_IN_SET() 更简单

 

SELECT * FROM linkinfo WHERE FIND_IN_SET( ‘1’, pingid )

 

 

 

原来以为mysql可以进行这样的查询
select id, list, name from table where ‘daodao’ IN (list);      (一)
注:1. table含有三个字段id:int, list:varchar(255), name:varchar(255)

实际上这样是不行的,这样只有当name是list中的第一个元素时,查询才有效,否则都的不到结果,即使’daodao’真的再list中

再来看看这个:
select id, list, name from table where ‘daodao’ IN (‘libk’, ‘zyfon’, ‘daodao’);    (二)
这样是可以的
———————————————————

这两条到底有什么区别呢?为什么第一条不能取得正确的结果,而第二条却能取得结果。

原因其实是(一)中 (list)    list是变量, 而(二)中 (‘libk’, ‘zyfon’, ‘daodao’)是常量

所以如果要让(一)能正确工作,需要用find_in_set():
select id, list, name from table where FIND_IN_SET( ‘daodao’ , list); (一)的改进版。

总结:所以如果list是常量,则可以直接用IN, 否则要用FIND_IN_SET()函数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113102.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PULL解析入门

    PULL解析入门PULL解析技术案例关于Android的pull解析技术详解对于一个很少写作的人来说,写一篇博客还算比较困难的,但是面对困难岂有退缩之理,好了废话说完了,开始进入正题。对于Android来说pull解析xml类型的文件应该是非常简单的,当然这是pull解析本身特性所决定的,那么接下来就跟随我的脚步来看一看pull解析的小巧之处吧。首先我从网上找了一个api接口[RRS腾讯](http://r

    2022年7月21日
    12
  • pycharm激活码key is invalid(JetBrains全家桶)

    (pycharm激活码key is invalid)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    659
  • steamvr插件怎么用_微信word插件加载失败

    steamvr插件怎么用_微信word插件加载失败本文基于SteamVR插件的开发文档翻译并总结SteamVR开发过程中的基本用法。本文总结汇总了SteamVR插件文档的内容,对文档部分内容进行了删减。目前仅仅只是翻译汇总,部分内容可能存在纰漏,后续会结合开发过程逐步更新修改此文章的内容。

    2022年9月4日
    3
  • python监控网页更新_python 监控网站更新

    python监控网页更新_python 监控网站更新{“moduleinfo”:{“card_count”:[{“count_phone”:1,”count”:1}],”search_count”:[{“count_phone”:4,”count”:4}]},”card”:[{“des”:”阿里技术人对外发布原创技术内容的最大平台;社区覆盖了云计算、大数据、人工智能、IoT、云原生、数据库、微服务、安全、开发与运维9大技术领域。”,”link1″:…

    2022年7月16日
    36
  • maven找不到包但是确实引入了_idea写python好吗

    maven找不到包但是确实引入了_idea写python好吗直接上图,记住选中的位置要设置为Resouce,不然from导入时,会导致pycharm自动从cronjob根路径导入。放linux中运行时,涉及到调用的时候,就报错cronjob包找不到,因为只能找到当前执行的python文件下开始找,而不能找到父包设置位置在这里:…

    2022年8月25日
    4
  • 软件测试前景和发展方向

    软件测试前景和发展方向2019最热门的软件测试趋势毛哥(译)放眼全球,了解技术发展的边界和趋势,有助于组织和个人的发展及竞争力的提升,偶尔看到国外某网站的一篇文章,读来颇值得参考,简单翻译过来,分享一下。也许这篇文章会给你一份指南,让你快速成长与发展。如今,随着世界数字化,我们目睹了技术进步的巨大变化。2019年也将标志着技术和数字化转型的巨大变化,从而要求组织不断创新和重塑自我。#1)敏捷与D…

    2022年4月28日
    69

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号