@@ -123,7 +123,7 @@ select @d:=1111;
123
123
1111
124
124
select year(@d), month(@d), day(@d), cast(@d as date);
125
125
year(@d) month(@d) day(@d) cast(@d as date)
126
- 2000 11 11 2000-11-11
126
+ 1111 0 0 1111-00-00
127
127
select @d:=011111;
128
128
@d:=011111
129
129
11111
@@ -135,12 +135,7 @@ select @d:=1311;
135
135
1311
136
136
select year(@d), month(@d), day(@d), cast(@d as date);
137
137
year(@d) month(@d) day(@d) cast(@d as date)
138
- NULL NULL NULL NULL
139
- Warnings:
140
- Warning 1292 Incorrect datetime value: '1311'
141
- Warning 1292 Incorrect datetime value: '1311'
142
- Warning 1292 Incorrect datetime value: '1311'
143
- Warning 1292 Incorrect datetime value: '1311'
138
+ 1311 0 0 1311-00-00
144
139
create table t1 (d date , dt datetime , ts timestamp);
145
140
insert ignore into t1 values (9912101,9912101,9912101);
146
141
Warnings:
@@ -934,8 +929,7 @@ EXPLAIN EXTENDED SELECT * FROM t1 WHERE 1995.0000000 BETWEEN f AND '2012-12-12';
934
929
id select_type table type possible_keys key key_len ref rows filtered Extra
935
930
1 SIMPLE t1 range f f 4 NULL 1 100.00 Using where; Using index
936
931
Warnings:
937
- Warning 1292 Truncated incorrect datetime value: '1995.0000000'
938
- Note 1003 select `test`.`t1`.`f` AS `f` from `test`.`t1` where '0000-00-00' between `test`.`t1`.`f` and <cache>('2012-12-12')
932
+ Note 1003 select `test`.`t1`.`f` AS `f` from `test`.`t1` where '1995-00-00' between `test`.`t1`.`f` and <cache>('2012-12-12')
939
933
DROP TABLE t1;
940
934
#
941
935
# MDEV-27072 Subquery using the ALL keyword on date columns produces a wrong result
@@ -1089,14 +1083,14 @@ SET sql_mode=DEFAULT;
1089
1083
#
1090
1084
SELECT NULLIF(CAST(1012.5 AS DATE), 1);
1091
1085
NULLIF(CAST(1012.5 AS DATE), 1)
1092
- 2000-10-12
1086
+ 1012-00-00
1093
1087
Warnings:
1094
1088
Note 1292 Truncated incorrect date value: '1012.5'
1095
1089
Warning 1292 Truncated incorrect datetime value: '1'
1096
1090
Note 1292 Truncated incorrect date value: '1012.5'
1097
1091
SELECT CAST(1012.5 AS DATE) * 1.0;
1098
1092
CAST(1012.5 AS DATE) * 1.0
1099
- 20001012 .0
1093
+ 10120000 .0
1100
1094
Warnings:
1101
1095
Note 1292 Truncated incorrect date value: '1012.5'
1102
1096
#
@@ -1286,3 +1280,124 @@ indexed_col not_indexed_col
1286
1280
DROP TABLE t2;
1287
1281
DROP TABLE t1;
1288
1282
SET note_verbosity=DEFAULT;
1283
+ #
1284
+ # MDEV-9343: Copying from YEAR to DATE result in '0000-00-00'
1285
+ #
1286
+ #
1287
+ # Setup
1288
+ #
1289
+ DROP TABLE IF EXISTS t1, t2, t3;
1290
+ Warnings:
1291
+ Note 1051 Unknown table 'test.t1,test.t2,test.t3'
1292
+ CREATE TABLE t1 (a YEAR);
1293
+ CREATE TABLE t2 (a DATE);
1294
+ CREATE TABLE t3 (a DATETIME);
1295
+ SET SESSION sql_mode = '';
1296
+ INSERT INTO t1 VALUES (2000), (0), (1901), (2155), (70);
1297
+ INSERT INTO t2 SELECT a FROM t1;
1298
+ INSERT INTO t3 SELECT a FROM t1;
1299
+ SELECT * FROM t2 ORDER BY a;
1300
+ a
1301
+ 0000-00-00
1302
+ 1901-00-00
1303
+ 1970-00-00
1304
+ 2000-00-00
1305
+ 2155-00-00
1306
+ SELECT * FROM t3 ORDER BY a;
1307
+ a
1308
+ 0000-00-00 00:00:00
1309
+ 1901-00-00 00:00:00
1310
+ 1970-00-00 00:00:00
1311
+ 2000-00-00 00:00:00
1312
+ 2155-00-00 00:00:00
1313
+ SHOW WARNINGS;
1314
+ Level Code Message
1315
+ SET SESSION sql_mode = 'NO_ZERO_IN_DATE';
1316
+ DELETE FROM t2;
1317
+ DELETE FROM t3;
1318
+ INSERT INTO t2 SELECT a FROM t1;
1319
+ Warnings:
1320
+ Warning 1265 Data truncated for column 'a' at row 1
1321
+ Warning 1265 Data truncated for column 'a' at row 3
1322
+ Warning 1265 Data truncated for column 'a' at row 4
1323
+ Warning 1265 Data truncated for column 'a' at row 5
1324
+ INSERT INTO t3 SELECT a FROM t1;
1325
+ Warnings:
1326
+ Warning 1265 Data truncated for column 'a' at row 1
1327
+ Warning 1265 Data truncated for column 'a' at row 3
1328
+ Warning 1265 Data truncated for column 'a' at row 4
1329
+ Warning 1265 Data truncated for column 'a' at row 5
1330
+ SHOW ERRORS;
1331
+ Level Code Message
1332
+ SELECT * FROM t2;
1333
+ a
1334
+ 0000-00-00
1335
+ 0000-00-00
1336
+ 0000-00-00
1337
+ 0000-00-00
1338
+ 0000-00-00
1339
+ SELECT * FROM t3;
1340
+ a
1341
+ 0000-00-00 00:00:00
1342
+ 0000-00-00 00:00:00
1343
+ 0000-00-00 00:00:00
1344
+ 0000-00-00 00:00:00
1345
+ 0000-00-00 00:00:00
1346
+ SET SESSION sql_mode = '';
1347
+ ALTER TABLE t1 MODIFY a DATE;
1348
+ SELECT * FROM t1;
1349
+ a
1350
+ 2000-00-00
1351
+ 0000-00-00
1352
+ 1901-00-00
1353
+ 2155-00-00
1354
+ 1970-00-00
1355
+ ALTER TABLE t1 MODIFY a YEAR;
1356
+ Warnings:
1357
+ Warning 1265 Data truncated for column 'a' at row 1
1358
+ Warning 1265 Data truncated for column 'a' at row 2
1359
+ Warning 1265 Data truncated for column 'a' at row 3
1360
+ Warning 1265 Data truncated for column 'a' at row 4
1361
+ Warning 1265 Data truncated for column 'a' at row 5
1362
+ SELECT * FROM t1;
1363
+ a
1364
+ 2000
1365
+ 0000
1366
+ 1901
1367
+ 2155
1368
+ 1970
1369
+ SET SESSION sql_mode = 'NO_ZERO_IN_DATE';
1370
+ ALTER TABLE t1 MODIFY a DATE;
1371
+ Warnings:
1372
+ Warning 1265 Data truncated for column 'a' at row 1
1373
+ Warning 1265 Data truncated for column 'a' at row 3
1374
+ Warning 1265 Data truncated for column 'a' at row 4
1375
+ Warning 1265 Data truncated for column 'a' at row 5
1376
+ SELECT * FROM t1;
1377
+ a
1378
+ 0000-00-00
1379
+ 0000-00-00
1380
+ 0000-00-00
1381
+ 0000-00-00
1382
+ 0000-00-00
1383
+ SET SESSION sql_mode = '';
1384
+ SELECT CAST(a AS DATE), CAST(a AS DATETIME) FROM t1 ORDER BY a;
1385
+ CAST(a AS DATE) CAST(a AS DATETIME)
1386
+ 0000-00-00 0000-00-00 00:00:00
1387
+ 0000-00-00 0000-00-00 00:00:00
1388
+ 0000-00-00 0000-00-00 00:00:00
1389
+ 0000-00-00 0000-00-00 00:00:00
1390
+ 0000-00-00 0000-00-00 00:00:00
1391
+ SET SESSION sql_mode = 'NO_ZERO_IN_DATE';
1392
+ SELECT CAST(a AS DATE), CAST(a AS DATETIME) FROM t1;
1393
+ CAST(a AS DATE) CAST(a AS DATETIME)
1394
+ 0000-00-00 0000-00-00 00:00:00
1395
+ 0000-00-00 0000-00-00 00:00:00
1396
+ 0000-00-00 0000-00-00 00:00:00
1397
+ 0000-00-00 0000-00-00 00:00:00
1398
+ 0000-00-00 0000-00-00 00:00:00
1399
+ #
1400
+ # Cleanup
1401
+ #
1402
+ DROP TABLE t1, t2, t3;
1403
+ SET SESSION sql_mode = DEFAULT;
0 commit comments