5
drop table if exists t1,t2,t3;
8
select from_days(to_days("960101")),to_days(960201)-to_days("19960101"),to_days(date_add(curdate(), interval 1 day))-to_days(curdate()),weekday("1997-11-29");
9
select period_add("9602",-12),period_diff(199505,"9404") ;
11
select now()-now(),weekday(curdate())-weekday(now()),unix_timestamp()-unix_timestamp(now());
12
select from_unixtime(unix_timestamp("1994-03-02 10:11:12")),from_unixtime(unix_timestamp("1994-03-02 10:11:12"),"%Y-%m-%d %h:%i:%s"),from_unixtime(unix_timestamp("1994-03-02 10:11:12"))+0;
13
select date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w");
14
select date_format("1997-01-02", concat("%M %W %D ","%Y %y %m %d %h %i %s %w"));
15
select dayofmonth("1997-01-02"),dayofmonth(19970323);
16
select month("1997-01-02"),year("98-02-03"),dayofyear("1997-12-31");
17
--error ER_INVALID_DATETIME_VALUE # No more bad dates!
18
select month("2001-02-00"),year("2001-01-01");
19
select DAYOFYEAR("1997-03-03"), QUARTER(980303);
20
select HOUR("1997-03-03 23:03:22"), MINUTE("23:03:22"), SECOND(230322);
23
select date_format('1998-12-31','%x-%v'),date_format('1999-01-01','%x-%v');
24
select date_format('1999-12-31','%x-%v'),date_format('2000-01-01','%x-%v');
26
select dayname("1962-03-03"),dayname("1962-03-03")+0;
27
select monthname("1972-03-04"),monthname("1972-03-04")+0;
28
select time_format(19980131000000,'%H|%I|%k|%l|%i|%p|%r|%S|%T');
29
select time_format(19980131010203,'%H|%I|%k|%l|%i|%p|%r|%S|%T');
30
select time_format(19980131131415,'%H|%I|%k|%l|%i|%p|%r|%S|%T');
31
select time_format(19980131010015,'%H|%I|%k|%l|%i|%p|%r|%S|%T');
32
select date_format(concat('19980131',131415),'%H|%I|%k|%l|%i|%p|%r|%S|%T| %M|%W|%D|%Y|%y|%a|%b|%j|%m|%d|%h|%s|%w');
33
select date_format(19980021000000,'%H|%I|%k|%l|%i|%p|%r|%S|%T| %M|%W|%D|%Y|%y|%a|%b|%j|%m|%d|%h|%s|%w');
34
select date_add("1997-12-31 23:59:59",INTERVAL 1 SECOND);
35
select date_add("1997-12-31 23:59:59",INTERVAL 1 MINUTE);
36
select date_add("1997-12-31 23:59:59",INTERVAL 1 HOUR);
37
select date_add("1997-12-31 23:59:59",INTERVAL 1 DAY);
38
select date_add("1997-12-31 23:59:59",INTERVAL 1 MONTH);
39
select date_add("1997-12-31 23:59:59",INTERVAL 1 YEAR);
40
select date_add("1997-12-31 23:59:59",INTERVAL "1:1" MINUTE_SECOND);
41
select date_add("1997-12-31 23:59:59",INTERVAL "1:1" HOUR_MINUTE);
42
select date_add("1997-12-31 23:59:59",INTERVAL "1:1" DAY_HOUR);
43
select date_add("1997-12-31 23:59:59",INTERVAL "1 1" YEAR_MONTH);
44
select date_add("1997-12-31 23:59:59",INTERVAL "1:1:1" HOUR_SECOND);
45
select date_add("1997-12-31 23:59:59",INTERVAL "1 1:1" DAY_MINUTE);
46
select date_add("1997-12-31 23:59:59",INTERVAL "1 1:1:1" DAY_SECOND);
48
select date_sub("1998-01-01 00:00:00",INTERVAL 1 SECOND);
49
select date_sub("1998-01-01 00:00:00",INTERVAL 1 MINUTE);
50
select date_sub("1998-01-01 00:00:00",INTERVAL 1 HOUR);
51
select date_sub("1998-01-01 00:00:00",INTERVAL 1 DAY);
52
select date_sub("1998-01-01 00:00:00",INTERVAL 1 MONTH);
53
select date_sub("1998-01-01 00:00:00",INTERVAL 1 YEAR);
54
select date_sub("1998-01-01 00:00:00",INTERVAL "1:1" MINUTE_SECOND);
55
select date_sub("1998-01-01 00:00:00",INTERVAL "1:1" HOUR_MINUTE);
56
select date_sub("1998-01-01 00:00:00",INTERVAL "1:1" DAY_HOUR);
57
select date_sub("1998-01-01 00:00:00",INTERVAL "1 1" YEAR_MONTH);
58
select date_sub("1998-01-01 00:00:00",INTERVAL "1:1:1" HOUR_SECOND);
59
select date_sub("1998-01-01 00:00:00",INTERVAL "1 1:1" DAY_MINUTE);
60
select date_sub("1998-01-01 00:00:00",INTERVAL "1 1:1:1" DAY_SECOND);
62
select date_add("1997-12-31 23:59:59",INTERVAL 100000 SECOND);
63
select date_add("1997-12-31 23:59:59",INTERVAL -100000 MINUTE);
64
select date_add("1997-12-31 23:59:59",INTERVAL 100000 HOUR);
65
select date_add("1997-12-31 23:59:59",INTERVAL -100000 DAY);
66
select date_add("1997-12-31 23:59:59",INTERVAL 100000 MONTH);
67
select date_add("1997-12-31 23:59:59",INTERVAL -100000 YEAR);
68
select date_add("1997-12-31 23:59:59",INTERVAL "10000:1" MINUTE_SECOND);
69
select date_add("1997-12-31 23:59:59",INTERVAL "-10000:1" HOUR_MINUTE);
70
select date_add("1997-12-31 23:59:59",INTERVAL "10000:1" DAY_HOUR);
71
select date_add("1997-12-31 23:59:59",INTERVAL "-100 1" YEAR_MONTH);
72
select date_add("1997-12-31 23:59:59",INTERVAL "10000:99:99" HOUR_SECOND);
73
select date_add("1997-12-31 23:59:59",INTERVAL " -10000 99:99" DAY_MINUTE);
74
select date_add("1997-12-31 23:59:59",INTERVAL "10000 99:99:99" DAY_SECOND);
75
select "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
76
select INTERVAL 1 DAY + "1997-12-31";
77
select "1998-01-01 00:00:00" - INTERVAL 1 SECOND;
79
select date_sub("1998-01-02",INTERVAL 31 DAY);
80
select date_add("1997-12-31",INTERVAL 1 SECOND);
81
select date_add("1997-12-31",INTERVAL 1 DAY);
82
select date_add(NULL,INTERVAL 100000 SECOND);
83
select date_add("1997-12-31 23:59:59",INTERVAL NULL SECOND);
84
select date_add("1997-12-31 23:59:59",INTERVAL NULL MINUTE_SECOND);
85
select date_add("9999-12-31 23:59:59",INTERVAL 1 SECOND);
86
select date_sub("0000-00-00 00:00:00",INTERVAL 1 SECOND);
87
select date_add('1998-01-30',Interval 1 month);
88
select date_add('1998-01-30',Interval '2:1' year_month);
89
select date_add('1996-02-29',Interval '1' year);
90
select extract(YEAR FROM "1999-01-02 10:11:12");
91
select extract(YEAR_MONTH FROM "1999-01-02");
92
select extract(DAY FROM "1999-01-02");
93
select extract(DAY_HOUR FROM "1999-01-02 10:11:12");
94
# The following is an interval, not a time!
95
--error ER_INVALID_DATETIME_VALUE # Bad datetime
96
select extract(DAY_MINUTE FROM "02 10:11:12");
97
# The following is an interval, not a time!
98
--error ER_INVALID_DATETIME_VALUE # Bad datetime
99
select extract(DAY_SECOND FROM "225 10:11:12");
100
select extract(HOUR FROM "1999-01-02 10:11:12");
101
select extract(HOUR_MINUTE FROM "10:11:12");
102
select extract(HOUR_SECOND FROM "10:11:12");
103
select extract(MINUTE FROM "10:11:12");
104
select extract(MINUTE_SECOND FROM "10:11:12");
105
select extract(SECOND FROM "1999-01-02 10:11:12");
106
--error ER_INVALID_DATETIME_VALUE # Bad datetime
107
select extract(MONTH FROM "2001-02-00");
110
# test EXTRACT QUARTER (Bug #18100)
113
SELECT EXTRACT(QUARTER FROM '2004-01-15') AS quarter;
114
SELECT EXTRACT(QUARTER FROM '2004-02-15') AS quarter;
115
SELECT EXTRACT(QUARTER FROM '2004-03-15') AS quarter;
116
SELECT EXTRACT(QUARTER FROM '2004-04-15') AS quarter;
117
SELECT EXTRACT(QUARTER FROM '2004-05-15') AS quarter;
118
SELECT EXTRACT(QUARTER FROM '2004-06-15') AS quarter;
119
SELECT EXTRACT(QUARTER FROM '2004-07-15') AS quarter;
120
SELECT EXTRACT(QUARTER FROM '2004-08-15') AS quarter;
121
SELECT EXTRACT(QUARTER FROM '2004-09-15') AS quarter;
122
SELECT EXTRACT(QUARTER FROM '2004-10-15') AS quarter;
123
SELECT EXTRACT(QUARTER FROM '2004-11-15') AS quarter;
124
SELECT EXTRACT(QUARTER FROM '2004-12-15') AS quarter;
127
# Test big intervals (Bug #3498)
129
SELECT "1900-01-01 00:00:00" + INTERVAL 2147483648 SECOND;
130
SELECT "1900-01-01 00:00:00" + INTERVAL "1:2147483647" MINUTE_SECOND;
131
SELECT "1900-01-01 00:00:00" + INTERVAL "100000000:214748364700" MINUTE_SECOND;
132
SELECT "1900-01-01 00:00:00" + INTERVAL "1000000000:214748364700" MINUTE_SECOND;
135
# Bug #614 (multiple extracts in where)
138
create table t1 (ctime varchar(20));
139
insert into t1 values ('2001-01-12 12:23:40');
140
select ctime, hour(ctime) from t1;
141
select ctime from t1 where extract(MONTH FROM ctime) = 1 AND extract(YEAR FROM ctime) = 2001;
145
# Test bug with monthname() and NULL
148
create table t1 (id int);
149
create table t2 (id int, date date);
150
insert into t1 values (1);
151
insert into t2 values (1, NULL);
152
insert into t1 values (2);
153
insert into t2 values (2, "2000-01-01");
154
select monthname(date) from t1 inner join t2 on t1.id = t2.id;
155
select monthname(date) from t1 inner join t2 on t1.id = t2.id order by t1.id;
159
# Test bug with month() and year() on text fields with wrong information
161
CREATE TEMPORARY TABLE t1 (updated text) ENGINE=MyISAM;
162
INSERT INTO t1 VALUES ('');
163
--error ER_INVALID_DATETIME_VALUE # "" is not a date!
164
SELECT month(updated) from t1;
165
--error ER_INVALID_DATETIME_VALUE # "" is not a date for pete's sake.
166
SELECT year(updated) from t1;
170
# Check that functions work identically on 0000-00-00 as a constant and on a
174
create table t1 (d date, dt datetime, t timestamp, c char(10));
175
insert into t1 values (null, null, null, null);
177
--error ER_INVALID_DATE_VALUE # Bad dates...
178
insert into t1 values ("0000-00-00", "0000-00-00", "0000-00-00", "0000-00-00");
180
--error ER_INVALID_DATETIME_VALUE # 0000-00-00 is a bad date
181
select dayofyear("0000-00-00"),dayofyear(d),dayofyear(dt),dayofyear(t),dayofyear(c) from t1;
183
--error ER_INVALID_DATETIME_VALUE # 0000-00-00 is a bad date
184
select dayofmonth("0000-00-00"),dayofmonth(d),dayofmonth(dt),dayofmonth(t),dayofmonth(c) from t1;
186
--error ER_INVALID_DATETIME_VALUE # 0000-00-00 is not a damn date.
187
select month("0000-00-00"),month(d),month(dt),month(t),month(c) from t1;
189
--error ER_INVALID_DATETIME_VALUE # 0000-00-00 not a date
190
select quarter("0000-00-00"),quarter(d),quarter(dt),quarter(t),quarter(c) from t1;
192
--error ER_INVALID_DATETIME_VALUE # Argh. 0000-00-00 is not a date.
193
select year("0000-00-00"),year(d),year(dt),year(t),year(c) from t1;
195
--error ER_INVALID_DATETIME_VALUE # Bad datetime
196
select to_days("0000-00-00"),to_days(d),to_days(dt),to_days(c) from t1;
198
--error ER_INVALID_DATETIME_VALUE # Ugh. bad datetime
199
select extract(MONTH FROM "0000-00-00"),extract(MONTH FROM d),extract(MONTH FROM dt),extract(MONTH FROM t),extract(MONTH FROM c) from t1;
204
# Test problem with TIMESTAMP and BETWEEN
207
CREATE TABLE t1 ( start datetime default NULL);
208
INSERT INTO t1 VALUES ('2002-10-21 00:00:00'),('2002-10-28 00:00:00'),('2002-11-04 00:00:00');
209
CREATE TABLE t2 ( ctime1 timestamp NOT NULL, ctime2 timestamp NOT NULL);
210
INSERT INTO t2 VALUES (20021029165106,20021105164731);
211
CREATE TABLE t3 (ctime1 char(19) NOT NULL, ctime2 char(19) NOT NULL);
212
INSERT INTO t3 VALUES ("2002-10-29 16:51:06","2002-11-05 16:47:31");
214
# The following statement should be fixed to return a row in 4.1
215
select * from t1, t2 where t1.start between t2.ctime1 and t2.ctime2;
216
select * from t1, t2 where t1.start >= t2.ctime1 and t1.start <= t2.ctime2;
217
select * from t1, t3 where t1.start between t3.ctime1 and t3.ctime2;
221
# Test unix timestamp
223
select @a:=FROM_UNIXTIME(1);
224
select unix_timestamp(@a);
225
select unix_timestamp('1970-01-01 00:00:01');
228
# Tests for bug #6439 "unix_timestamp() function returns wrong datetime
229
# values for too big argument", bug #7515 "from_unixtime(0) now
230
# returns NULL instead of the epoch" and bug #9191
231
# "TIMESTAMP/from_unixtime() no longer accepts 2^31-1."
232
# unix_timestamp() should return error for too big or negative argument.
233
# It should return Epoch value for zero argument since it seems that many
234
# users rely on this fact, from_unixtime() should work with values
235
# up to INT_MAX32 because of the same reason.
237
select from_unixtime(-1);
238
# check for from_unixtime(2^31-1) and from_unixtime(2^31)
239
select from_unixtime(2147483647);
240
select from_unixtime(2147483648);
241
select from_unixtime(0);
244
# Some more tests for bug #9191 "TIMESTAMP/from_unixtime() no
245
# longer accepts 2^31-1". Here we test that from_unixtime and
246
# unix_timestamp are consistent, when working with boundary dates.
248
select unix_timestamp(from_unixtime(2147483647));
249
select unix_timestamp(from_unixtime(2147483648));
251
# check for invalid dates
253
# Legal, Drizzle has 64bit timestamp
254
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
255
select unix_timestamp('2039-01-20 01:00:00');
257
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
258
select unix_timestamp('1968-01-20 01:00:00');
260
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
261
select unix_timestamp('2038-02-10 01:00:00');
263
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
264
select unix_timestamp('1969-11-20 01:00:00');
266
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
267
select unix_timestamp('2038-01-20 01:00:00');
269
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
270
select unix_timestamp('1969-12-30 01:00:00');
273
# Check negative shift (we subtract several days for boundary dates during
275
select unix_timestamp('2038-01-17 12:00:00');
277
# check bad date, close to the boundary (we cut them off in the very end)
278
select unix_timestamp('2038-01-19 03:14:07');
282
# Test types from + INTERVAL
285
CREATE TABLE t1 (datetime_arg datetime, timestamp_arg timestamp, date_arg date);
286
INSERT INTO t1 values ("2001-01-02 03:04:05", "2002-01-02 03:04:05", "2003-01-02");
288
select date_add("1997-12-31",INTERVAL 1 SECOND);
289
select date_add("1997-12-31",INTERVAL "1 1" YEAR_MONTH);
291
select date_add(datetime_arg, INTERVAL 1 SECOND) from t1;
292
select date_add(datetime_arg, INTERVAL 1 YEAR) from t1;
294
select date_add(date_arg, INTERVAL 1 SECOND) from t1;
295
select date_add(date_arg, INTERVAL 1 MINUTE) from t1;
296
select date_add(date_arg, INTERVAL 1 HOUR) from t1;
297
select date_add(date_arg, INTERVAL 1 DAY) from t1;
298
select date_add(date_arg, INTERVAL 1 MONTH) from t1;
299
select date_add(date_arg, INTERVAL 1 YEAR) from t1;
300
select date_add(date_arg, INTERVAL "1:1" MINUTE_SECOND) from t1;
301
select date_add(date_arg, INTERVAL "1:1" HOUR_MINUTE) from t1;
302
select date_add(date_arg, INTERVAL "1:1" DAY_HOUR) from t1;
303
select date_add(date_arg, INTERVAL "1 1" YEAR_MONTH) from t1;
304
select date_add(date_arg, INTERVAL "1:1:1" HOUR_SECOND) from t1;
305
select date_add(date_arg, INTERVAL "1 1:1" DAY_MINUTE) from t1;
306
select date_add(date_arg, INTERVAL "1 1:1:1" DAY_SECOND) from t1;
307
select date_add(date_arg, INTERVAL "1" WEEK) from t1;
308
select date_add(date_arg, INTERVAL "1" QUARTER) from t1;
309
select timestampadd(MINUTE, 1, date_arg) from t1;
310
select timestampadd(WEEK, 1, date_arg) from t1;
311
select timestampadd(SQL_TSI_SECOND, 1, date_arg) from t1;
312
# mysqltest.c discards an expected 'deprecated' warning on prepare stage
313
--disable_ps_protocol
314
select timestampadd(SQL_TSI_FRAC_SECOND, 1, date_arg) from t1;
317
select timestampdiff(MONTH, '2001-02-01', '2001-05-01') as a;
318
select timestampdiff(YEAR, '2002-05-01', '2001-01-01') as a;
319
select timestampdiff(QUARTER, '2002-05-01', '2001-01-01') as a;
320
select timestampdiff(MONTH, '2000-03-28', '2000-02-29') as a;
321
select timestampdiff(MONTH, '1991-03-28', '2000-02-29') as a;
322
select timestampdiff(SQL_TSI_WEEK, '2001-02-01', '2001-05-01') as a;
323
select timestampdiff(SQL_TSI_HOUR, '2001-02-01', '2001-05-01') as a;
324
select timestampdiff(SQL_TSI_DAY, '2001-02-01', '2001-05-01') as a;
325
select timestampdiff(SQL_TSI_MINUTE, '2001-02-01 12:59:59', '2001-05-01 12:58:59') as a;
326
select timestampdiff(SQL_TSI_SECOND, '2001-02-01 12:59:59', '2001-05-01 12:58:58') as a;
327
# mysqltest.c discards an expected 'deprecated' warning on prepare stage
328
--disable_ps_protocol
329
select timestampdiff(SQL_TSI_FRAC_SECOND, '2001-02-01 12:59:59.120000', '2001-05-01 12:58:58.119999') as a;
332
select timestampdiff(SQL_TSI_DAY, '1986-02-01', '1986-03-01') as a1,
333
timestampdiff(SQL_TSI_DAY, '1900-02-01', '1900-03-01') as a2,
334
timestampdiff(SQL_TSI_DAY, '1996-02-01', '1996-03-01') as a3,
335
timestampdiff(SQL_TSI_DAY, '2000-02-01', '2000-03-01') as a4;
338
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:27');
339
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:28');
340
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:29');
341
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:27');
342
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:28');
343
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:29');
345
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:27');
346
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:28');
347
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:29');
348
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:27');
349
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:28');
350
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:29');
352
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:27');
353
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:28');
354
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:29');
355
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:27');
356
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:28');
357
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:29');
359
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:27');
360
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:28');
361
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:29');
362
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:27');
363
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:28');
364
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:29');
370
select last_day('2000-02-05');
371
select last_day('2002-12-31');
372
--error ER_INVALID_DATETIME_VALUE # Bad date
373
select last_day('2003-03-32');
374
select last_day('2003-04-01');
375
select last_day('2001-01-01 01:01:01');
376
select last_day(NULL);
377
select last_day('2001-02-12');
379
create table t1 select last_day('2000-02-05') as a,
380
from_days(to_days("960101")) as b;
384
select last_day('2000-02-05') as a,
385
from_days(to_days("960101")) as b;
387
select date_add(last_day("1997-12-1"), INTERVAL 1 DAY);
388
select length(last_day("1997-12-1"));
389
select last_day("1997-12-1")+0;
390
select last_day("1997-12-1")+0.0;
392
# Test SAPDB UTC_% functions. This part is TZ dependant (It is supposed that
393
# TZ variable set to GMT-3
395
select strcmp(date_sub(localtimestamp(), interval 0 hour), utc_timestamp())=0;
396
select strcmp(date_format(date_sub(localtimestamp(), interval 0 hour),"%Y-%m-%d"), utc_date())=0;
397
select strcmp(date_format(utc_timestamp(),"%Y-%m-%d"), utc_date())=0;
399
explain extended select period_add("9602",-12),period_diff(199505,"9404"),from_days(to_days("960101")),dayofmonth("1997-01-02"), month("1997-01-02"), monthname("1972-03-04"),dayofyear("0000-00-00"),HOUR("1997-03-03 23:03:22"),MINUTE("23:03:22"),SECOND(230322),QUARTER(980303),weekday(curdate())-weekday(now()),dayname("1962-03-03"),unix_timestamp(),curdate(),utc_date(),utc_timestamp(),date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w"),from_unixtime(unix_timestamp("1994-03-02 10:11:12")),"1997-12-31 23:59:59" + INTERVAL 1 SECOND,"1998-01-01 00:00:00" - INTERVAL 1 SECOND,INTERVAL 1 DAY + "1997-12-31", extract(YEAR FROM "1999-01-02 10:11:12"),date_add("1997-12-31 23:59:59",INTERVAL 1 SECOND);
401
SET @TMP='2007-08-01 12:22:49';
402
CREATE TABLE t1 (d DATETIME);
403
INSERT INTO t1 VALUES ('2007-08-01 12:22:59');
404
INSERT INTO t1 VALUES ('2007-08-01 12:23:01');
405
INSERT INTO t1 VALUES ('2007-08-01 12:23:20');
406
SELECT count(*) FROM t1 WHERE d>FROM_DAYS(TO_DAYS(@TMP)) AND d<=FROM_DAYS(TO_DAYS(@TMP)+1);
413
--error ER_INVALID_DATETIME_VALUE # Bad date
414
select last_day('2005-00-00');
415
--error ER_INVALID_DATETIME_VALUE # Bad date
416
select last_day('2005-00-01');
417
--error ER_INVALID_DATETIME_VALUE # Bad date
418
select last_day('2005-01-00');
421
# Bug#16377 result of DATE/TIME functions were compared as strings which
422
# can lead to a wrong result.
423
# Now wrong dates should be compared only with CAST()
424
create table t1(f1 date, f3 datetime);
425
insert into t1 values ("2006-01-01", "2006-01-01 12:01:01");
426
insert into t1 values ("2006-01-02", "2006-01-02 12:01:02");
427
select f1 from t1 where f1 between CAST("2006-1-1" as date) and CAST(20060101 as date);
428
select f1 from t1 where f1 between cast("2006-1-1" as date) and cast("2006.1.1" as date);
429
select f1 from t1 where date(f1) between cast("2006-1-1" as date) and cast("2006.1.1" as date);
430
select f3 from t1 where f3 between cast("2006-1-1 12:1:1" as datetime) and cast("2006-1-1 12:1:2" as datetime);
431
select f3 from t1 where timestamp(f3) between cast("2006-1-1 12:1:1" as datetime) and cast("2006-1-1 12:1:2" as datetime);
432
select f1 from t1 where cast("2006-1-1" as date) between f1 and f3;
433
select f1 from t1 where cast("2006-1-1" as date) between date(f1) and date(f3);
434
select f1 from t1 where cast("2006-1-1" as date) between f1 and cast('zzz' as date);
435
select f1 from t1 where makedate(2006,1) between date(f1) and date(f3);
436
select f1 from t1 where makedate(2006,2) between date(f1) and date(f3);
439
# check if EXTRACT() handles out-of-range values correctly
440
--error ER_INVALID_DATETIME_VALUE # Bad datetime
441
SELECT EXTRACT(HOUR FROM '100000:02:03');
444
# 21913: DATE_FORMAT() Crashes mysql server if I use it through
445
# mysql-connector-j driver.
448
SHOW VARIABLES LIKE 'character_set_results';
450
CREATE TABLE testBug8868 (field1 DATE, field2 VARCHAR(32));
451
INSERT INTO testBug8868 VALUES ('2006-09-04', 'abcd');
453
SELECT DATE_FORMAT(field1,'%b-%e %l:%i%p') as fmtddate, field2 FROM testBug8868;
455
DROP TABLE testBug8868;
458
# Bug #23653: crash if last_day('0000-00-00')
461
--error ER_INVALID_DATETIME_VALUE # Bad date
462
select last_day('0000-00-00');
464
--echo End of 4.1 tests
466
explain extended select timestampdiff(SQL_TSI_WEEK, '2001-02-01', '2001-05-01') as a1,
467
timestampdiff(SQL_TSI_FRAC_SECOND, '2001-02-01 12:59:59.120000', '2001-05-01 12:58:58.119999') as a2;
470
# Bug #10590: %h, %I, and %l format specifies should all return results in
473
select time_format('100:00:00', '%H %k %h %I %l');
476
# Bug #13534: timestampdiff() returned incorrect results across leap years
478
select timestampdiff(month,'2004-09-11','2004-09-11');
479
select timestampdiff(month,'2004-09-11','2005-09-11');
480
select timestampdiff(month,'2004-09-11','2006-09-11');
481
select timestampdiff(month,'2004-09-11','2007-09-11');
482
select timestampdiff(month,'2005-09-11','2004-09-11');
483
select timestampdiff(month,'2005-09-11','2003-09-11');
485
select timestampdiff(month,'2004-02-28','2005-02-28');
486
select timestampdiff(month,'2004-02-29','2005-02-28');
487
select timestampdiff(month,'2004-02-28','2005-02-28');
488
select timestampdiff(month,'2004-03-29','2005-03-28');
489
select timestampdiff(month,'2003-02-28','2004-02-29');
490
select timestampdiff(month,'2003-02-28','2005-02-28');
492
select timestampdiff(month,'1999-09-11','2001-10-10');
493
select timestampdiff(month,'1999-09-11','2001-9-11');
495
select timestampdiff(year,'1999-09-11','2001-9-11');
496
select timestampdiff(year,'2004-02-28','2005-02-28');
497
select timestampdiff(year,'2004-02-29','2005-02-28');
500
# Bug #18618: BETWEEN for dates with the second argument being a constant
501
# expression and the first and the third arguments being fields
504
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, day date);
505
CREATE TABLE t2 (id int NOT NULL PRIMARY KEY, day date);
507
INSERT INTO t1 VALUES
508
(1, '2005-06-01'), (2, '2005-02-01'), (3, '2005-07-01');
509
INSERT INTO t2 VALUES
510
(1, '2005-08-01'), (2, '2005-06-15'), (3, '2005-07-15');
515
'2005.09.01' - INTERVAL 6 MONTH AND t2.day;
518
WHERE CAST(t1.day AS DATE) BETWEEN
519
'2005.09.01' - INTERVAL 6 MONTH AND t2.day;
524
# Bug #21103: DATE column not compared as DATE
527
create table t1 (field DATE);
528
insert into t1 values ('2006-11-06');
529
select * from t1 where field < '2006-11-06 04:08:36.0';
530
select * from t1 where field = '2006-11-06 04:08:36.0';
531
select * from t1 where field = '2006-11-06';
532
select * from t1 where CAST(field as DATETIME) < '2006-11-06 04:08:36.0';
533
select * from t1 where CAST(field as DATE) < '2006-11-06 04:08:36.0';
537
# Bug#32180: DATE_ADD treats datetime numeric argument as DATE
538
# instead of DATETIME
541
select DATE_ADD('20071108181000', INTERVAL 1 DAY);
542
select DATE_ADD(20071108181000, INTERVAL 1 DAY);
543
select DATE_ADD('20071108', INTERVAL 1 DAY);
544
select DATE_ADD(20071108, INTERVAL 1 DAY);
547
# Bug#32770: LAST_DAY() returns a DATE, but somehow internally keeps
551
select LAST_DAY('2007-12-06 08:59:19.05') - INTERVAL 1 SECOND;
554
# Bug#33834: FRAC_SECOND: Applicability not clear in documentation
556
# Show that he use of FRAC_SECOND, for anything other than
557
# TIMESTAMPADD / TIMESTAMPDIFF, is a server error.
559
# mysqltest.c discards an expected 'deprecated' warning on prepare stage
560
SELECT TIMESTAMPADD(FRAC_SECOND, 1, '2008-02-18');
561
SELECT TIMESTAMPDIFF(FRAC_SECOND, '2008-02-17', '2008-02-18');
563
--error ER_PARSE_ERROR
564
SELECT DATE_ADD('2008-02-18', INTERVAL 1 FRAC_SECOND);
565
--error ER_PARSE_ERROR
566
SELECT DATE_SUB('2008-02-18', INTERVAL 1 FRAC_SECOND);
568
--error ER_PARSE_ERROR
569
SELECT '2008-02-18' + INTERVAL 1 FRAC_SECOND;
570
--error ER_PARSE_ERROR
571
SELECT '2008-02-18' - INTERVAL 1 FRAC_SECOND;
573
--echo End of 5.0 tests
579
select date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND);
580
select date_sub("0199-01-01 00:00:01",INTERVAL 2 SECOND);
581
select date_add("0199-12-31 23:59:59",INTERVAL 2 SECOND);
582
select date_sub("0200-01-01 00:00:01",INTERVAL 2 SECOND);
583
select date_sub("0200-01-01 00:00:01",INTERVAL 1 SECOND);
584
select date_sub("0200-01-01 00:00:01",INTERVAL 2 SECOND);
585
select date_add("2001-01-01 23:59:59",INTERVAL -2000 YEAR);
586
select date_sub("50-01-01 00:00:01",INTERVAL 2 SECOND);
587
select date_sub("90-01-01 00:00:01",INTERVAL 2 SECOND);
588
select date_sub("0069-01-01 00:00:01",INTERVAL 2 SECOND);
589
select date_sub("0169-01-01 00:00:01",INTERVAL 2 SECOND);
592
--echo End of 5.1 tests