mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fix for bug #16226 (timestamp_diff truncation issue when requesting
difference between timestamp in values of months and quarters.) Problem: when requesting timestamp diff in months or quarters, it would only examine the date (and not the time) for the comparison. Solution: increased precision of comparison. mysql-test/r/func_time.result: Additional test results mysql-test/t/func_time.test: Additional tests sql/item_timefunc.cc: Fix for timestamp diff issue. Added microsecond precision when comparing months or quarters; previously only examined date for these comparisons.
This commit is contained in:
@ -667,6 +667,78 @@ timestampdiff(SQL_TSI_DAY, '1996-02-01', '1996-03-01') as a3,
|
||||
timestampdiff(SQL_TSI_DAY, '2000-02-01', '2000-03-01') as a4;
|
||||
a1 a2 a3 a4
|
||||
28 28 29 29
|
||||
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:27');
|
||||
TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:27')
|
||||
0
|
||||
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:28');
|
||||
TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:28')
|
||||
1
|
||||
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:29');
|
||||
TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:29')
|
||||
1
|
||||
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:27');
|
||||
TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:27')
|
||||
1
|
||||
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:28');
|
||||
TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:28')
|
||||
2
|
||||
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:29');
|
||||
TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:29')
|
||||
2
|
||||
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:27');
|
||||
TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:27')
|
||||
0
|
||||
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:28');
|
||||
TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:28')
|
||||
1
|
||||
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:29');
|
||||
TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:29')
|
||||
1
|
||||
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:27');
|
||||
TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:27')
|
||||
1
|
||||
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:28');
|
||||
TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:28')
|
||||
2
|
||||
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:29');
|
||||
TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:29')
|
||||
2
|
||||
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:27');
|
||||
TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:27')
|
||||
0
|
||||
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:28');
|
||||
TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:28')
|
||||
1
|
||||
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:29');
|
||||
TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:29')
|
||||
1
|
||||
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:27');
|
||||
TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:27')
|
||||
1
|
||||
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:28');
|
||||
TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:28')
|
||||
2
|
||||
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:29');
|
||||
TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:29')
|
||||
2
|
||||
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:27');
|
||||
TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:27')
|
||||
0
|
||||
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:28');
|
||||
TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:28')
|
||||
1
|
||||
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:29');
|
||||
TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:29')
|
||||
1
|
||||
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:27');
|
||||
TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:27')
|
||||
1
|
||||
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:28');
|
||||
TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:28')
|
||||
2
|
||||
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:29');
|
||||
TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:29')
|
||||
2
|
||||
select date_add(time,INTERVAL 1 SECOND) from t1;
|
||||
date_add(time,INTERVAL 1 SECOND)
|
||||
NULL
|
||||
|
@ -318,6 +318,37 @@ select timestampdiff(SQL_TSI_DAY, '1986-02-01', '1986-03-01') as a1,
|
||||
timestampdiff(SQL_TSI_DAY, '1996-02-01', '1996-03-01') as a3,
|
||||
timestampdiff(SQL_TSI_DAY, '2000-02-01', '2000-03-01') as a4;
|
||||
|
||||
# bug 16226
|
||||
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:27');
|
||||
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:28');
|
||||
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:29');
|
||||
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:27');
|
||||
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:28');
|
||||
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:29');
|
||||
|
||||
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:27');
|
||||
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:28');
|
||||
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:29');
|
||||
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:27');
|
||||
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:28');
|
||||
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:29');
|
||||
|
||||
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:27');
|
||||
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:28');
|
||||
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:29');
|
||||
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:27');
|
||||
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:28');
|
||||
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:29');
|
||||
|
||||
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:27');
|
||||
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:28');
|
||||
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:29');
|
||||
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:27');
|
||||
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:28');
|
||||
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:29');
|
||||
|
||||
# end of bug
|
||||
|
||||
select date_add(time,INTERVAL 1 SECOND) from t1;
|
||||
drop table t1;
|
||||
|
||||
|
Reference in New Issue
Block a user