php - MYSQL里类似20-35这种格式的年龄段字段,如何进行范围查找?
代言
代言 2017-06-10 09:47:49
0
8
1042

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);

勉强能用,但是总感觉哪里怪怪的

代言
代言

全部回复(8)
刘奇

按你说的30-55符合25-34的话,可以这样

select * from tbl where left(age,2)<=34 and right(age,2)>=25;
洪涛

这个不好判断,30-55 符不符合你要的25-34的条件呢?还是必须要在25-34之内的?要看你的具体要求了

扔个三星炸死你

我很好奇为什么数据表结构要这样设计 为什么不是存年龄? 如果这样设计表结构 为什么还要有取25-34岁之间的数据?你的年龄只是指定的一个区间不是一个具体数值 你应该重新去设计你的表结构 不要将错就错

伊谢尔伦

1、你这样存年龄段,是不是应该在另起一个key来区分年龄的跨度。
2、截图还出现1-5,2-6,3-4这样的跨度设计,如果用户要是3该选哪个合理。

代言

一大堆对mysql内置函数都没认透的人也给别人乱指导

为情所困

问题源头,数据库设计都不合理

滿天的星座

推荐你用抽象的思维反推一下:将表里age字段存的信息看作集合 A,将 where 中的条件看作集合 C,你最终的结果是要符合什么情况?

  1. 集合 A 和集合 C 有交集

  2. 集合 A 是集合 C 的子集

  3. 集合 C 是集合 C 的自己

然后在这个基础上,你当前表结构肯定是不适合的,如果数据量不大的话,可以对数据做个离线清洗,将 age 字段拆分成 lower limit 和 upper limit,这样再做集合筛选方法就很多了。

伊谢尔伦

你这表结构无法实现你说的功能

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板