我想使用MySQL数据库从两个不同的日期中得到年份的差异.
例如:
- 2011-07-20 - 2011-07-18 => 0 year
- 2011-07-20 - 2010-07-20 => 1 year
- 2011-06-15 - 2008-04-11 =>
23 years - 2011-06-11 - 2001-10-11 => 9 years
SQL语法如何?MySQL是否有任何内置函数来生成结果?
我想使用MySQL数据库从两个不同的日期中得到年份的差异.
例如:
SQL语法如何?MySQL是否有任何内置函数来生成结果?
下面的表达也迎合了闰年:
YEAR(date1) - YEAR(date2) - (DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d'))
这是因为,如果date1比date2"早于一年",则表达式(DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d'))
是true
,因为在mysql、true = 1
和false = 0
中,调整只是减go 比较的"真相"的问题.
这为您的测试用例提供了正确的值,但测试#3除外——我认为它应该是"3",以与测试#1保持一致:
create table so7749639 (date1 date, date2 date);
insert into so7749639 values
('2011-07-20', '2011-07-18'),
('2011-07-20', '2010-07-20'),
('2011-06-15', '2008-04-11'),
('2011-06-11', '2001-10-11'),
('2007-07-20', '2004-07-20');
select date1, date2,
YEAR(date1) - YEAR(date2)
- (DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d')) as diff_years
from so7749639;
输出:
+------------+------------+------------+
| date1 | date2 | diff_years |
+------------+------------+------------+
| 2011-07-20 | 2011-07-18 | 0 |
| 2011-07-20 | 2010-07-20 | 1 |
| 2011-06-15 | 2008-04-11 | 3 |
| 2011-06-11 | 2001-10-11 | 9 |
| 2007-07-20 | 2004-07-20 | 3 |
+------------+------------+------------+