mysql裡有個(gè)字段age,裡面存的是年齡段,格式類別如圖所示,如果是0-0則是不限
現(xiàn)在的需求是要根據(jù)年齡層來查找,例如我要找出所有介於25-34歲之間的數(shù)據(jù)。
那麼問題來了,如果where裡面使用and的話,得到的結(jié)果很少很少,幾乎沒有,如果使用or,結(jié)果是變多了,但是很明顯結(jié)果並不準(zhǔn)確。如何才能準(zhǔn)確的查找呢
感謝大家的回答,目前我用的方法是
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) ;
勉強(qiáng)能用,但總覺得哪裡怪怪的
照你說的30-55符合25-34的話,可以這樣
select * from tbl where left(age,2)<=34 and right(age,2)>=25;
這個(gè)不好判斷,30-55 符不符合你要的25-34的條件呢?還是必須要在25-34之內(nèi)的?要看你的具體要求了
我很好奇為什麼資料表結(jié)構(gòu)要這樣設(shè)計(jì) 為什麼不是存年齡? 如果這樣設(shè)計(jì)表結(jié)構(gòu) 為什麼還要有取25-34歲的資料?你的年齡只是指定的一個(gè)區(qū)間不是一個(gè)具體數(shù)值 你應(yīng)該重新去設(shè)計(jì)你的表結(jié)構(gòu) 不要將錯(cuò)就錯(cuò)
1、你這樣存年齡段,是不是應(yīng)該在另起一個(gè)key來區(qū)分年齡的跨度。
2、截圖還出現(xiàn)1-5,2-6,3-4這樣的跨度設(shè)計(jì),如果使用者要是3該選哪個(gè)合理。
推薦你用抽象的思維反推一下:將表裡age字段存的信息看作集合 A,將 where 中的條件看作集合 C,你最終的結(jié)果是要符合什麼情況?
集合 A 和集合 C 有交集
集合 A 是集合 C 的子集
集合 C 是集合 C 的自己
然後在這個(gè)基礎(chǔ)上,你目前表結(jié)構(gòu)肯定是不適合的,如果資料量不大的話,可以對資料做個(gè)離線清洗,將age 欄位拆分成lower limit 和upper limit,這樣再做集合篩選方法就很多了。