当前位置:   article > 正文

SQL之一天一个小技巧:如何判断某个字符是否在字符串中_sql 判断一个值是否在一个字符串中

sql 判断一个值是否在一个字符串中

目录

0 需求

1 实验

2 小结


0 需求

过滤出字符串中包含某字符的数据

1 实验

(1)用locate()函数判断【推荐比较高效】

我们知道locate()函数可以判断某个字符在字符串中的位置,如果不在该字符串中返回0值,如果在返回字符对应的索引位置。

select locate('1','10002,21002,11001,11001')
  1. 0: jdbc:hive2://10.9.1.212:10000> select locate('1','10002,21002,11001,11001');
  2. +------+--+
  3. | _c0 |
  4. +------+--+
  5. | 1 |
  6. +------+--+
  7. 1 row selected (0.093 seconds)
  8. 0: jdbc:hive2://10.9.1.212:10000>

返回值为1说明大于0,表示存在或包含

(2)用like正则匹配【不推荐,效率低】

select '10002,21002,11001,11001' like '%1%';
  1. 0: jdbc:hive2://10.9.1.212:10000> select '10002,21002,11001,11001' like '%1%';
  2. +-------+--+
  3. | _c0 |
  4. +-------+--+
  5. | true |
  6. +-------+--+
  7. 1 row selected (0.118 seconds)
  8. 0: jdbc:hive2://10.9.1.212:10000>
  9. select '10002210021100111001' like '%1%';
  10. 0: jdbc:hive2://10.9.1.212:10000> select '10002210021100111001' like '%1%';
  11. +-------+--+
  12. | _c0 |
  13. +-------+--+
  14. | true |
  15. +-------+--+
  16. 1 row selected (0.075 seconds)
  17. 0: jdbc:hive2://10.9.1.212:10000>

返回true值表示包含,存在要找的字符

(3)用regexp正则匹配。注意此时regxp()里面的正则为regexp('.*1.*')

select '10002,21002,11001,11001' regexp('.*1.*');
  1. 0: jdbc:hive2://10.9.1.212:10000> select '10002,21002,11001,11001' regexp('.*1.*');
  2. +-------+--+
  3. | _c0 |
  4. +-------+--+
  5. | true |
  6. +-------+--+
  7. 1 row selected (0.06 seconds)

具体测试case如下:

(1)regxp()测试

select count(1) from ods_phm_sigmach_lightunit_fea where slight_type regexp('.*1.*');

 (2)like模糊匹配测试

select count(1) from ods_phm_sigmach_lightunit_fea where slight_type like '%1%';

(3) locate()函数测试

select count(1) from ods_phm_sigmach_lightunit_fea where locate('1',slight_type) > 0;

 由测试的结果看:locate()>regexp()>like

2 小结

本文讲解了一种利用HQL判断字符串中是否包含某个字符的方法,给出了三种方法,经过测试分析得出使用locate()函数判断效果最高,regexp()函数次之,效率最差的为like模糊匹配,建议慎用。

欢迎关注石榴姐公众号"我的SQL呀",关注我不迷路

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/605111
推荐阅读
相关标签
  

闽ICP备14008679号