选择第一个字符是数字的位置

时间:2017-05-15 18:44:47

标签: mysql sql database

我正在创建一个查询,该查询应返回以0-9或a-z开头的标题,具体取决于请求的内容。我在title列上有一个索引,所以对于我正在做的各个字母:

SELECT * FROM table WHERE title LIKE 'a%';
SELECT * FROM table WHERE title LIKE 'b%';
SELECT * FROM table WHERE title LIKE 'c%';
/* etc... */

但是,对于这些数字而言,它的数字并不重要,只关注第一个字符是数字。我想要这样的东西:

SELECT * FROM table WHERE title LIKE '0%'
                       OR title LIKE '1%';
                       OR title LIKE '2%';
                       OR title LIKE '3%';
/* etc... */

但这感觉有点草率。据我所知,正则表达式对索引不会很好,我不确定字符串函数。像WHERE SUBSTRING(title,1,1) IN (0,1,2,3,4,5,6,7,8,9)这样的东西是否仍然可以利用索引,还是有更紧凑的方法来做到这一点?

2 个答案:

答案 0 :(得分:5)

如果你的字符都是“ASCII”,那么你可以这样做:

'9'

这应该可以使用索引。

我承认其含义有点难以捉摸,但冒号是{{1}}之后的第一个ASCII字符。

答案 1 :(得分:1)

@Gordon是正确的,因为所有ascii字符串都在'0'和':'之间

对于带字母的查询也是如此,'a'和'{'之间的所有字符串都匹配。

关于问题的第二部分,如果WHERE SUBSTRING(title,1,1) IN (0,1,2,3,4,5,6,7,8,9)将使用索引,则答案为否。当索引中的列用于函数SUBSTRING时,它必须将函数应用于表中的所有值,始终进行全表扫描。