2013-02-14 24 views
2

希望有人可以帮助我在这里...Mysql Beetween与一个字段进行比较?

我试图弄清楚如何我可以做一个数据库字段的检查。

我有一个名为“级别”字段,它存储如“0-7”(0-7)中的数据

我怎么做一个MySQL查询检查:

表“的价值观“:

ID | LEVEL 
1 | 0-7 
2 | 3-6 
3 | 4-5 

查询值”4“在任何行”级别“之间。

感谢您的帮助!

否则,我将不得不首先获取所有行并进行拆分以验证是否创建一个低值和高值的新字段,然后再进行比较。

更新:

所有伟大awnsers,但即使最坏的结果做了这个表的白痴

创建和额外的字段,如:

ID | LEVEL | Name 
1 | 1-7 | level 
2 | 3-6 | xperience 
3 | 4-5 | level 
4 | 1-5 | level 

意思就是我照着串也适用于使用“名称”=级别。 这可能吗?

+2

它可能会更好,如果你可以改变你的表的设计,包括像'low'和'high'列,然后检查这个范围。有些事告诉我,从长远来看最终会让你的生活更轻松。 – 2013-02-14 12:02:22

+1

@SayemAhmed同意。 – 2013-02-14 12:03:20

回答

1

这里是如何做到这一点,如果你不想改变你的架构:

create table test(
    id integer primary key auto_increment, 
    level varchar(50) 
); 

insert into test(level) values('0-7'); 
insert into test(level) values('3-6'); 
insert into test(level) values('4-5'); 

commit; 

select * 
from test 
where 4 between SUBSTRING_INDEX(level, '-', 1) AND SUBSTRING_INDEX(level, '-', -1); 
+0

更新了我的问题 – 2013-02-14 12:41:12

3

让2场所谓的“量_min”和“level_max”,使他们的数据从“0”存储到“7”
然后使用MySQL之间的查询

SELECT * FROM t WHERE 4 BETWEEN level_min AND level_max 

最重要的事情,这样的查询可以使用indedex,需要的id。
这对于任何或多或少的生活数据库都是必不可少的。

+0

打我吧,而我正在玩我的substring函数在MySQL!这是真正做到这一点的最好方式,因为当前的桌子设计很尴尬。 – Husman 2013-02-14 12:08:14

-1

我的水平场划分为2场,最小值和最大值,使生活更轻松。 但您可以对当前数据执行

select Id from table where 4 between SUBSTRING(level, 0, 1) and SUBSTRING(level, 2, 1) 

。 Mysql应该自动将子字符串转换为int。

+0

我认为它不适合level = '12 -15' – fsw 2013-02-14 12:10:50

+0

更新了我的问题 – 2013-02-14 12:39:32

0

正如所指出的那样,将性能分解是一个好主意。 如果因任何原因不能做到这一点,你可以使用SUBSTRING_INDEX:

SELECT * FROM values WHERE 
substring_index(level,'-',1) <= 4 AND 
substring_index(level,'-',-1) >= 4; 
+0

更新了我的问题 – 2013-02-14 12:39:50

+0

我不明白您更新的问题。不能,你只需在上面的查询中添加“AND'Name' ='level'”? – fsw 2013-02-14 12:49:09

+0

我也必须检查xperience ... 等级5和经验2 – 2013-02-14 13:12:12

0
select * from table_name where 4 between SUBSTRING_INDEX(LEVEL,'-',1) 
and SUBSTRING_INDEX(LEVEL,'-',-1); 
相关问题