Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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_Center - Fatal编程技术网

MySQL-如何使用中间文本/数字匹配查询结果

MySQL-如何使用中间文本/数字匹配查询结果,mysql,center,Mysql,Center,假设表中有一列数字和文本,从1001到fa00ty,甚至0110001或更长,有数百万行数据。我想查询表并返回在“文本的正中间/列的数字”中只有“00”或“0”的行。示例表 |some00e | |01100001 | |fa00ty | |m00ol | |23_00_asd| |some long string with 00 some long string with| “00”只有两个匹配结果,即fa00ty,因为00正是本文的中心,而“有00的一些长字符串有00的一些长

假设表中有一列数字和文本,从1001到fa00ty,甚至0110001或更长,有数百万行数据。我想查询表并返回在“文本的正中间/列的数字”中只有“00”或“0”的行。示例表

|some00e  |
|01100001 |
|fa00ty   |
|m00ol    |
|23_00_asd|
|some long string with 00 some long string with|


“00”只有两个匹配结果,即fa00ty,因为00正是本文的中心,而“有00的一些长字符串有00的一些长字符串”,对于单个0查询只有两个匹配结果。所以奇数或偶数长度并不重要。

就我个人而言,我会这样说:

SELECT stuff 
FROM test 
WHERE  
  (substring(stuff FROM (0-length(stuff)/2)-1 for 2) = "00"
  AND (length(stuff) % 2 = 0))
OR
  (substring(stuff FROM (0-ROUND(length(stuff)/2)) for 1) = "0" 
  AND (length(stuff) % 2 != 0))

这将只返回中间位数为“00”的偶数(即,确切的中间位数可以是两位数字),或中间位数为“0”的奇数。

以下查询速度更快。仍然不确定这是否是最好的答案,因为我不太了解这个问题,因此等待其他可能的解决方案。就我所能测试的范围而言,也不能处理任何大于3位数的数据

两位数

MID(`stuff`,round(LENGTH(`stuff`)/2),2) = '00' AND LENGTH(`stuff`)%2=0
一位数

MID(`stuff`,round(LENGTH(`stuff`)/2),1) = '0' AND LENGTH(`stuff`)%2

您可以预先排除长度为奇数的字符串。@PM77-1,偶数-奇数数字/字符串可能需要中心数字。我已经更新了这个问题来解释这个问题,而不是在问题或评论中,相反,X00应该被返回,因为“00”在字符串的中间。我建议你再读一遍。非常有趣的问题-谢谢你的反馈。当然可以,在571k行上大约需要1.5秒。为了澄清,我的第一条评论是针对另一条现在已被删除的评论。有趣的是,
MID
纯粹是
子字符串(字符串、pos、len)
的同义词,因此知道它有多快会很有趣。两者之间唯一的真正区别是我是向后数而不是向前数,所以很想知道这会产生多大的影响:)