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



想象一下表格中有一列数字和文本,从 1001 到 fa00ty,甚至 01100001 或更长,有数百万行数据。我想查询表并返回只有"00"的行,或者"列的文本/数字的正中间"中只有"0"。示例表

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

"00

"只有两个匹配结果,即 fa00ty,因为 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 位数字的任何内容。

对于 2 位数字

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

对于 1 位数字

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

最新更新