我有一个具有MySQL字段的dob(DATE format)表,现在我需要通过age.For示例获取记录--我已经编写了一个查询来获取超过18年的记录。我需要按年龄取记录,躺在18 year to 30 year老字号上。有人能告诉我这个问题的确切查询吗。已经尝试过的查询是
SELECT id,dob FROM profiles WHERE DATE_SUB(CURDATE(),INTERVAL 18 YEAR) > dob; 发布于 2015-07-31 06:46:33
你可以使用之间,如果你也包括18或30年:
SELECT id,dob FROM profiles WHERE dob between DATE_SUB(CURDATE(),INTERVAL 18 YEAR) and DATE_SUB(CURDATE(),INTERVAL 30 YEAR) 或者如果你应该排除:
SELECT id,dob FROM profiles WHERE dob < DATE_SUB(CURDATE(),INTERVAL 18 YEAR) and dob > DATE_SUB(CURDATE(),INTERVAL 30 YEAR) 发布于 2015-07-31 08:02:51
老实说,我讨厌减法日期,因为如果把数据按不同的顺序排列,函数会做一些奇怪的事情。我更喜欢添加,更简单,更无错误:P
SELECT id,dob FROM profiles WHERE DATE_ADD(dob,INTERVAL 18 YEAR) >= CURDATE() AND DATE_ADD(dob,INTERVAL 30 YEAR) <= CURDATE();发布于 2015-07-31 12:38:53
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;这与大型/大型表的性能相比要好得多。
https://stackoverflow.com/questions/31739656
复制相似问题