php - MYSQL裡類似20-35這種格式的年齡段字段,如何進行範圍查找?
代言
代言 2017-06-10 09:47:49
0
8
1063

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,這樣再做集合篩選方法就很多了。

伊谢尔伦

你這表結構無法實現你說的功能

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板