sql - MYSQL 选择修剪

标签 sql mysql

非常简单,我想选择所有以字母“A”开头的标题,同时忽略字符串开头的破折号。

SELECT * TRIM(LEADING '- ' FROM title) WHERE title LIKE 'A%'

这似乎行不通。请帮忙。谢谢。

最佳答案

如果你想要不错的速度,你应该尽可能避免每行函数。通常,我建议使用插入/更新触发器来存储修改后的数据,以便在所有选择中分摊计算成本(请参阅 here 了解解释以及我遵循的其他一些准则)但是,对于这种特殊情况,有一个更简单的方法*a

只需使用:

select * from table where title like 'A%' or title like '- A%'

如果您的 DBMS 的执行引擎有任何好处,它将把它变成两次非常快速(假设标题已编入索引)的数据传递,而无需处理表中的每一行。

如果您的执行引擎那么聪明,请尝试:

select * from table where title like 'A%'
union all select * from table where title like '- A%'

看看有没有帮助。确保使用 union all,而不仅仅是 union。后者将尝试删除重复项,在这种情况下是不必要的,因为标题不能同时以 "A" "- A" 开头。

并且,与所有优化一样,测量,不要猜测!


*a 如果您有机会进行不区分大小写的搜索,您可能仍要考虑使用触发器/列外方法。此答案中的方法对于第一个字母 (a%/A%/-a%/-A%) 不区分大小写可以正常工作,但如果您正在寻找类似以 Bill 开头的项目需要 32 个单独的子句(24 个字符组合,带和不带连字符前缀)。

关于sql - MYSQL 选择修剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4029562/

相关文章:

mysql - 更正错误的 insert-from-select SQL 语句

mysql - mysql 中的 round 效果不是很好

php - 更新 php 中的查询正确布局

sql - 帮助存储过程

sql - postgres go lib pq ","附近的语法错误

mysql - 如何根据一个或两个其他列的值派生表中的列

php - 如何根据表单提交的日期搜索记录

mysql - 在全新 CentOS 7 上正确安装 MySQL 5.7 时出现问题

php - 表不显示数据库中的第一条记录

sql - 这个地址数据库有多糟糕?