Mysql 选择第一个字符为数字的位置
我正在创建一个查询,该查询应返回以0-9或a-z开头的标题,具体取决于请求的内容。我在标题栏上有一个索引,因此对于我正在处理的单个字母:Mysql 选择第一个字符为数字的位置,mysql,sql,database,Mysql,Sql,Database,我正在创建一个查询,该查询应返回以0-9或a-z开头的标题,具体取决于请求的内容。我在标题栏上有一个索引,因此对于我正在处理的单个字母: 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 '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... */
但这感觉有点马虎。据我所知,正则表达式不能很好地处理索引,我也不确定字符串函数。如果子字符串标题(0,1,2,3,4,5,6,7,8,9中的1,1)仍然利用索引,或者有更紧凑的方法来实现这一点吗?如果您的字符都是ASCII,则可以执行以下操作:
where title >= '0' and title < ':'
这应该能够使用索引
我承认其含义有点难以捉摸,但冒号是“9”之后的第一个ASCII字符。如果您的字符都是ASCII字符,则可以执行以下操作:
where title >= '0' and title < ':'
这应该能够使用索引
我承认其含义有点难以捉摸,但冒号是“9”之后的第一个ASCII字符。@Gordon是正确的,因为所有ASCII字符串都在“0”和“:”之间 对于带有字母的查询也是如此,“a”和“{”之间的所有字符串都将匹配
关于问题的第二部分,如果0,1,2,3,4,5,6,7,8,9中的SUBSTRINGtitle 1,1将使用索引,答案是否定的。当索引中的列用于函数时,SUBSTRING在这种情况下,它必须将函数应用于表中的所有值,始终进行完整的表扫描。@Gordon在所有ascii str中都是正确的字符串介于“0”和“:”之间 对于带有字母的查询也是如此,“a”和“{”之间的所有字符串都将匹配
关于问题的第二部分,如果0,1,2,3,4,5,6,7,8,9中的1,1 SUBSTRINGtitle将使用索引,答案是否定的。当索引中的列用于函数时,在这种情况下,SUBSTRING必须将函数应用于表中的所有值,始终进行完整的表扫描。非常简单的解决方案。+1 WHERE title>=“0”和title@GordonLinoff我不这么认为……这是你的一个小小的变化。你试过了吗?@YesMan……之前的评论应该是:那不会返回“99”。这是一个很好的简单的解决方案。+1其中title>=“0”和title@GordonLinoff我不这么认为……这是你的一个小小变化。你试过了吗?@YesMan……以前的命令ent应该是:它不会返回'99'。