假设我有一个MySQL表,它有两行和两列。
Column 1 = ID
Column 2 = NUMBERS
第一行中的 NUMBERS
字段&第二行有以下逗号分隔值:
NUMBERS(Row 1) = 1,2,3,4,5,6,7,8
NUMBERS(Row 2) = 6,7,8,9,10,11
现在我需要找到介于1和1之间的所有数字。 11.我尝试过MYSQL BETWEEN
函数,但它没有返回所需的结果。
有没有办法让我得到理想的结果?
答案 0 :(得分:0)
有一个包含序列号的表,如
表sequence_numbers
number
1
2
..
100
您可以使用JOIN和FIND_IN_SET()函数从列表中提取数字:
select t.ID, s.number
from mytable t
join sequence_numbers s
on find_in_set(s.number, t.NUMBERS)
结果:
| ID | number |
|----|--------|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
| 1 | 6 |
| 2 | 6 |
| 1 | 7 |
| 2 | 7 |
| 1 | 8 |
| 2 | 8 |
| 2 | 9 |
| 2 | 10 |
| 2 | 11 |
http://sqlfiddle.com/#!9/b4144/4
现在很多任务都很简单。
限制在3到7之间的数字:
select t.ID, s.number
from mytable t
join sequence_numbers s
on find_in_set(s.number, t.NUMBERS)
where s.number between 3 and 7
结果:
| ID | number |
|----|--------|
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
| 1 | 6 |
| 2 | 6 |
| 1 | 7 |
| 2 | 7 |
http://sqlfiddle.com/#!9/b4144/3
创建大型序列表的一种简单方法是使用内部columns
表(或任何具有足够行的表)将其与自身连接起来:
create table sequence_numbers (number int auto_increment primary key)
select null as number
from information_schema.columns c1
cross join information_schema.columns c2
limit 1000000
;