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
1、你這樣存年齡段,是不是應該在另起一個key來區分年齡的跨度。
2、截圖還出現1-5,2-6,3-4這樣的跨度設計,如果使用者要是3該選哪個合理。
滿天的星座2017-06-10 09:49:49
推薦你用抽象的思維反推一下:將表裡age字段存的信息看作集合 A,將 where 中的條件看作集合 C,你最終的結果是要符合什麼情況?
集合 A 和集合 C 有交集
集合 A 是集合 C 的子集
集合 C 是集合 C 的自己
然後在這個基礎上,你目前表結構肯定是不適合的,如果資料量不大的話,可以對資料做個離線清洗,將age 欄位拆分成lower limit 和upper limit,這樣再做集合篩選方法就很多了。