提问人:Carlos Morales 提问时间:8/25/2014 更新时间:8/25/2014 访问量:55
如何根据特定年份显示年龄?
How can show ages according specific years?
问:
我试图根据特定的年龄等级显示年龄。
演示如下:
CREATE TABLE clients
(date_birth date, date_anniversary date);
INSERT INTO clients
(date_birth, date_anniversary)
VALUES
('1991-01-04',NULL ),
('1992-01-05',NULL ),
('1993-01-06',NULL ),
('1994-01-07',NULL ),
('1995-01-08',NULL ),
('1996-01-09',NULL ),
('1997-01-10',NULL ),
('1998-01-11',NULL ),
('1999-08-12',NULL ) ;
这是查询,它显示了所有年龄转换。
SET @start:='0';
SET @end:='22';
SELECT YEAR(CURDATE())- year(date_birth) AS ages
FROM clients
我正在尝试显示 0 到 22 之间的年龄,我尝试了这个演示:
SET @start:='0';
SET @end:='22';
SELECT YEAR(CURDATE())- year(date_birth) AS ages
FROM clients
WHERE year(date_birth) >= @start AND year(date_birth) <= @end
请有人可以帮助我或建议我吗?
提前致谢。
答:
2赞
Avitus
8/25/2014
#1
将查询更改为以下内容:
SET @start:='0';
SET @end:='22';
SELECT YEAR(CURDATE())- year(date_birth) AS ages
FROM clients
WHERE YEAR(CURDATE())- year(date_birth) >= @start
AND YEAR(CURDATE())- year(date_birth) <= @end
3赞
TJ-
8/25/2014
#2
您的查询应该是
SELECT YEAR(CURDATE())- year(date_birth) AS ages
FROM clients
WHERE date_birth <= (curdate() - interval @start year)
and date_birth >= (curdate() - interval @end year)
这也将利用您在date_birth上的索引(如果有的话)。
评论
0赞
Carlos Morales
8/25/2014
等一下,我尝试了其他日期,但无法正常工作 sqlfiddle.com/#!2/d62017/4
0赞
TJ-
8/25/2014
你的样本给了我结果。sqlfiddle.com/#!2/d62017/4/2什么不起作用?
0赞
Carlos Morales
8/25/2014
应介于 0 和 22 之间,这仅显示 0 和 21
0赞
TJ-
8/25/2014
我不这么认为。请注意,“1992-01-06”已超过22年。请注意,该月是 1 月,结果是 22 年零 7 个月(因此超过 22 年)。如果您想要更精确的示例,请使用“1992-09-06”。因此,您标记为问题答案的答案实际上是不正确的。
0赞
Carlos Morales
8/26/2014
没注意到会检查它。
1赞
John Ruddell
8/25/2014
#3
我更喜欢在查询中使用变量,这样您就不必重置它们
SELECT YEAR(CURDATE())- year(date_birth) AS ages
FROM clients
CROSS JOIN(SELECT @start := 0, @end := 22)t
HAVING ages BETWEEN @start AND @end
上一个:如何在格式翻译中显示数字?
评论
where
1995 >= 0 AND 1995 <= 22
WHERE YEAR(birthday) >= (YEAR(CURDATE()) - 22)
句 demo