Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择第一个字符为数字的位置_Mysql_Sql_Database - Fatal编程技术网

Mysql 选择第一个字符为数字的位置

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... */ 然而,对于数字来说,它是哪个数字并不重要,重要的是第一个字符是数字。我想要像

我正在创建一个查询,该查询应返回以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 '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'。