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);
勉强能用,但是总感觉哪里怪怪的
按你说的30-55符合25-34的话,可以这样
这个不好判断,30-55 符不符合你要的25-34的条件呢?还是必须要在25-34之内的?要看你的具体要求了
我很好奇为什么数据表结构要这样设计 为什么不是存年龄? 如果这样设计表结构 为什么还要有取25-34岁之间的数据?你的年龄只是指定的一个区间不是一个具体数值 你应该重新去设计你的表结构 不要将错就错
1、你这样存年龄段,是不是应该在另起一个key来区分年龄的跨度。
2、截图还出现1-5,2-6,3-4这样的跨度设计,如果用户要是3该选哪个合理。
一大堆对mysql内置函数都没认透的人也给别人乱指导
问题源头,数据库设计都不合理
推荐你用抽象的思维反推一下:将表里age字段存的信息看作集合 A,将 where 中的条件看作集合 C,你最终的结果是要符合什么情况?
集合 A 和集合 C 有交集
集合 A 是集合 C 的子集
集合 C 是集合 C 的自己
然后在这个基础上,你当前表结构肯定是不适合的,如果数据量不大的话,可以对数据做个离线清洗,将 age 字段拆分成 lower limit 和 upper limit,这样再做集合筛选方法就很多了。
你这表结构无法实现你说的功能