MySQL-如何使用中间文本/数字匹配查询结果
假设表中有一列数字和文本,从1001到fa00ty,甚至0110001或更长,有数百万行数据。我想查询表并返回在“文本的正中间/列的数字”中只有“00”或“0”的行。示例表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的一些长
|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)
的同义词,因此知道它有多快会很有趣。两者之间唯一的真正区别是我是向后数而不是向前数,所以很想知道这会产生多大的影响:)