mysql里有个字段age,里面存的是年龄段,格式类如图所示,如果是0-0则是不限
现在的需求是要根据年龄段查找,比如我要找出所有介于25-34岁之间的数据。
那么问题来了,如果where里面使用and的话,得到的结果很少很少,几乎没有,如果使用or,结果是变多了,但是很明显结果并不准确。如何才能准确的查找呢
感谢大家的回答,目前我用的办法是
SELECT age FROM
jobs
WHERE ((substring_index(age,'-',1) >= 16 OR substring_index(age,'-',-1) = 0) OR (substring_index(age,'-',-1) <= 24)) AND !(substring_index(age,'-',1) = 0 AND substring_index(age,'-',-1) = 0);
勉强能用,但是总感觉哪里怪怪的
怪我咯2017-06-10 09:49:49
按你说的30-55符合25-34的话,可以这样
select * from tbl where left(age,2)<=34 and right(age,2)>=25;
扔个三星炸死你2017-06-10 09:49:49
我很好奇为什么数据表结构要这样设计 为什么不是存年龄? 如果这样设计表结构 为什么还要有取25-34岁之间的数据?你的年龄只是指定的一个区间不是一个具体数值 你应该重新去设计你的表结构 不要将错就错
滿天的星座2017-06-10 09:49:49
推荐你用抽象的思维反推一下:将表里age字段存的信息看作集合 A,将 where 中的条件看作集合 C,你最终的结果是要符合什么情况?
集合 A 和集合 C 有交集
集合 A 是集合 C 的子集
集合 C 是集合 C 的自己
然后在这个基础上,你当前表结构肯定是不适合的,如果数据量不大的话,可以对数据做个离线清洗,将 age 字段拆分成 lower limit 和 upper limit,这样再做集合筛选方法就很多了。