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

时间:2017-10-04 19:22:45

标签: mysql center

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

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

" 00"只有两个匹配的结果因为00正好是这个文本的中心,而且有些长字符串是00,而某些长字符串是'和单个0查询的两个。如此奇怪甚至长度并不重要。

2 个答案:

答案 0 :(得分:1)

就个人而言,我会选择这样的事情:

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”的奇数。

答案 1 :(得分: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