首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要在年龄之间获取mysql数据。

我需要在年龄之间获取mysql数据。
EN

Stack Overflow用户
提问于 2015-07-31 06:43:59
回答 3查看 112关注 0票数 0

我有一个具有MySQL字段的dob(DATE format)表,现在我需要通过age.For示例获取记录--我已经编写了一个查询来获取超过18年的记录。我需要按年龄取记录,躺在18 year to 30 year老字号上。有人能告诉我这个问题的确切查询吗。已经尝试过的查询是

代码语言:javascript
复制
SELECT id,dob FROM profiles WHERE DATE_SUB(CURDATE(),INTERVAL 18 YEAR) > dob;    
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-31 06:46:33

你可以使用之间,如果你也包括18或30年:

代码语言:javascript
复制
SELECT id,dob FROM profiles WHERE dob between DATE_SUB(CURDATE(),INTERVAL 18 YEAR) and DATE_SUB(CURDATE(),INTERVAL 30 YEAR) 

或者如果你应该排除:

代码语言:javascript
复制
SELECT id,dob FROM profiles WHERE dob < DATE_SUB(CURDATE(),INTERVAL 18 YEAR) and dob > DATE_SUB(CURDATE(),INTERVAL 30 YEAR) 
票数 1
EN

Stack Overflow用户

发布于 2015-07-31 08:02:51

老实说,我讨厌减法日期,因为如果把数据按不同的顺序排列,函数会做一些奇怪的事情。我更喜欢添加,更简单,更无错误:P

代码语言:javascript
复制
SELECT id,dob FROM profiles WHERE DATE_ADD(dob,INTERVAL 18 YEAR) >= CURDATE() AND DATE_ADD(dob,INTERVAL 30 YEAR) <= CURDATE();
票数 0
EN

Stack Overflow用户

发布于 2015-07-31 12:38:53

代码语言:javascript
复制
set sdate := DATE_SUB(CURDATE(),INTERVAL 18 YEAR);
set edate := DATE_SUB(CURDATE(),INTERVAL 30 YEAR);
SELECT id,dob FROM profiles 
WHERE dob < sdate and dob > edate;

这与大型/大型表的性能相比要好得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31739656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档