Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.0(EOL), 10.1(EOL), 10.2(EOL)
-
None
-
10.2.11
Description
CAST from DATE to TIME usually returns zero time 00:00:00:
SELECT CAST(DATE'2001-01-01' AS TIME) |
+--------------------------------+
|
| CAST(DATE'2001-01-01' AS TIME) |
|
+--------------------------------+
|
| 00:00:00 |
|
+--------------------------------+
|
However, in some cases it works differently:
SELECT CAST(MAX(DATE'2001-01-01') AS TIME); |
SHOW WARNINGS;
|
+-------------------------------------+
|
| CAST(MAX(DATE'2001-01-01') AS TIME) |
|
+-------------------------------------+
|
| 00:20:01 |
|
+-------------------------------------+
|
1 row in set, 1 warning (0.00 sec)
|
|
+---------+------+----------------------------------------------+
|
| Level | Code | Message |
|
+---------+------+----------------------------------------------+
|
| Warning | 1292 | Truncated incorrect time value: '2001-01-01' |
|
+---------+------+----------------------------------------------+
|
1 row in set (0.00 sec)
|
The problem happens because Item_sum_max does not implement its own get_date() method, so execution goes through the generic Item::get_date() which calls val_str() followed by string-to-time conversion.
Attachments
Activity
Field | Original Value | New Value |
---|---|---|
Description |
CAST from DATE to TIME usually returns zero time {{00:00:00}}:
{code:sql} SELECT CAST(DATE'2001-01-01' AS TIME) {code} {noformat} +--------------------------------+ | CAST(DATE'2001-01-01' AS TIME) | +--------------------------------+ | 00:00:00 | +--------------------------------+ {noformat} However, in some cases it works differently: {code:sql} SELECT CAST(MAX(DATE'2001-01-01') AS TIME); SHOW WARNINGS; {code} {noformat} +-------------------------------------+ | CAST(MAX(DATE'2001-01-01') AS TIME) | +-------------------------------------+ | 00:20:01 | +-------------------------------------+ 1 row in set, 1 warning (0.00 sec) +---------+------+----------------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------------+ | Warning | 1292 | Truncated incorrect time value: '2001-01-01' | +---------+------+----------------------------------------------+ 1 row in set (0.00 sec) {noforrnat} |
CAST from DATE to TIME usually returns zero time {{00:00:00}}:
{code:sql} SELECT CAST(DATE'2001-01-01' AS TIME) {code} {noformat} +--------------------------------+ | CAST(DATE'2001-01-01' AS TIME) | +--------------------------------+ | 00:00:00 | +--------------------------------+ {noformat} However, in some cases it works differently: {code:sql} SELECT CAST(MAX(DATE'2001-01-01') AS TIME); SHOW WARNINGS; {code} {noformat} +-------------------------------------+ | CAST(MAX(DATE'2001-01-01') AS TIME) | +-------------------------------------+ | 00:20:01 | +-------------------------------------+ 1 row in set, 1 warning (0.00 sec) +---------+------+----------------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------------+ | Warning | 1292 | Truncated incorrect time value: '2001-01-01' | +---------+------+----------------------------------------------+ 1 row in set (0.00 sec) {noformat} |
Description |
CAST from DATE to TIME usually returns zero time {{00:00:00}}:
{code:sql} SELECT CAST(DATE'2001-01-01' AS TIME) {code} {noformat} +--------------------------------+ | CAST(DATE'2001-01-01' AS TIME) | +--------------------------------+ | 00:00:00 | +--------------------------------+ {noformat} However, in some cases it works differently: {code:sql} SELECT CAST(MAX(DATE'2001-01-01') AS TIME); SHOW WARNINGS; {code} {noformat} +-------------------------------------+ | CAST(MAX(DATE'2001-01-01') AS TIME) | +-------------------------------------+ | 00:20:01 | +-------------------------------------+ 1 row in set, 1 warning (0.00 sec) +---------+------+----------------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------------+ | Warning | 1292 | Truncated incorrect time value: '2001-01-01' | +---------+------+----------------------------------------------+ 1 row in set (0.00 sec) {noformat} |
CAST from DATE to TIME usually returns zero time {{00:00:00}}:
{code:sql} SELECT CAST(DATE'2001-01-01' AS TIME) {code} {noformat} +--------------------------------+ | CAST(DATE'2001-01-01' AS TIME) | +--------------------------------+ | 00:00:00 | +--------------------------------+ {noformat} However, in some cases it works differently: {code:sql} SELECT CAST(MAX(DATE'2001-01-01') AS TIME); SHOW WARNINGS; {code} {noformat} +-------------------------------------+ | CAST(MAX(DATE'2001-01-01') AS TIME) | +-------------------------------------+ | 00:20:01 | +-------------------------------------+ 1 row in set, 1 warning (0.00 sec) +---------+------+----------------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------------+ | Warning | 1292 | Truncated incorrect time value: '2001-01-01' | +---------+------+----------------------------------------------+ 1 row in set (0.00 sec) {noformat} The problem happens because Item_sum_max does not implement its own get_date() method, so execution goes through the generic Item::get_date() which calls val_str() followed by string-to-time conversion. |
Status | Open [ 1 ] | In Progress [ 3 ] |
Status | In Progress [ 3 ] | Stalled [ 10000 ] |
Fix Version/s | 10.2.11 [ 22634 ] | |
Fix Version/s | 10.3.3 [ 22644 ] | |
Fix Version/s | 10.2 [ 14601 ] | |
Resolution | Fixed [ 1 ] | |
Status | Stalled [ 10000 ] | Closed [ 6 ] |
Sprint | 10.2.11 [ 203 ] |
Workflow | MariaDB v3 [ 77112 ] | MariaDB v4 [ 150922 ] |
Also repeatable in this scenario: