python - SQL like语句问题和PATINDEX
高洛峰
高洛峰 2017-04-18 09:40:22
[Python讨论组]
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(4)
黄舟

如果用字符匹配功能,要求字符串同时含有a,b,c,除了像你那样用 and 连接 like 也想不出什么其他好办法。如果把字符串打散成一个array,转而判断集合的包含关系,可以这样:

select * from (values('cabbage'), ('black'), ('sblunc')) as articles(link)
where array['a','b','c'] <@ regexp_split_to_array(link, E'\\s*');
  link
---------
 cabbage
 black
(2 行记录)
PHPz

你说的 patindex 和 charindex 在 SQL Server里有,其他的sql这些函数可能有替代的,具体不是很清楚。

PHP中文网

like '%a%'是要作大死的节奏呀,这子句严重影响执行效率,目测你是想把link包含有字符串'a'的都选择出来,那你应该用下面这句。

select * from `articles` where position('a' in `link`);
ringa_lee
  1. 没区别,||是postgresql的拼接符,'a'||'b'拼起来就是'ab'。

  2. Python没用过,不知道,有个list你到底是想同时满足list里所有元素还是满足任一即可?你这SQL用and连接可是要满足所有的,如果是满足任一一个,可以用or,也可以用in,但是like和in的效率问题你自己得试试。

  3. patindex就是查第一个参数在第二个参数的什么位置,返回位置号,不过这是SQL Server专用的,在postgresql里可以用strpos(string, substring)代替。
    另外注意两点,第一,like避免在开头使用%匹配,否则效率很慢,第二,尽量在where里用到的字段上建索引,加快匹配速度。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号