Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
None
Description
CAST(AS DECIMAL) returns wrong values in many cases:
DROP TABLE IF EXISTS t1; |
CREATE TABLE t1 (a VARCHAR(64)) ENGINE=ColumnStore; |
DELIMITER $$
|
FOR i IN 1..9 DO |
INSERT INTO t1 VALUES (REPEAT(i,37)); |
INSERT INTO t1 VALUES (REPEAT(i,38)); |
INSERT INTO t1 VALUES (REPEAT(i,39)); |
END FOR; |
$$
|
DELIMITER ;
|
SELECT LENGTH(a), a, CAST(a AS DECIMAL(37,1)) FROM t1 ORDER BY LENGTH(a), a; |
+-----------+-----------------------------------------+-----------------------------------------+
|
| LENGTH(a) | a | CAST(a AS DECIMAL(37,1)) |
|
+-----------+-----------------------------------------+-----------------------------------------+
|
| 37 | 1111111111111111111111111111111111111 | 999999999999999999999999999999999999.9 |
|
| 37 | 2222222222222222222222222222222222222 | 999999999999999999999999999999999999.9 |
|
| 37 | 3333333333333333333333333333333333333 | 999999999999999999999999999999999999.9 |
|
| 37 | 4444444444444444444444444444444444444 | 999999999999999999999999999999999999.9 |
|
| 37 | 5555555555555555555555555555555555555 | 999999999999999999999999999999999999.9 |
|
| 37 | 6666666666666666666666666666666666666 | 999999999999999999999999999999999999.9 |
|
| 37 | 7777777777777777777777777777777777777 | 999999999999999999999999999999999999.9 |
|
| 37 | 8888888888888888888888888888888888888 | 999999999999999999999999999999999999.9 |
|
| 37 | 9999999999999999999999999999999999999 | 999999999999999999999999999999999999.9 |
|
| 38 | 11111111111111111111111111111111111111 | 999999999999999999999999999999999999.9 |
|
| 38 | 22222222222222222222222222222222222222 | -999999999999999999999999999999999999.9 | <-- BAD
|
| 38 | 33333333333333333333333333333333333333 | -694903358760513013004127409843487812.6 | <-- BAD
|
| 38 | 44444444444444444444444444444444444444 | 999999999999999999999999999999999999.9 |
|
| 38 | 55555555555555555555555555555555555555 | -999999999999999999999999999999999999.9 | <-- BAD
|
| 38 | 66666666666666666666666666666666666666 | -999999999999999999999999999999999999.9 | <-- BAD
|
| 38 | 77777777777777777777777777777777777777 | 999999999999999999999999999999999999.9 |
|
| 38 | 88888888888888888888888888888888888888 | -999999999999999999999999999999999999.9 | <-- BAD
|
| 38 | 99999999999999999999999999999999999999 | -999999999999999999999999999999999999.9 | <-- BAD
|
| 39 | 111111111111111111111111111111111111111 | 999999999999999999999999999999999999.9 |
|
| 39 | 222222222222222222222222222222222222222 | 999999999999999999999999999999999999.9 |
|
| 39 | 333333333333333333333333333333333333333 | 999999999999999999999999999999999999.9 |
|
| 39 | 444444444444444444444444444444444444444 | 999999999999999999999999999999999999.9 |
|
| 39 | 555555555555555555555555555555555555555 | 999999999999999999999999999999999999.9 |
|
| 39 | 666666666666666666666666666666666666666 | 999999999999999999999999999999999999.9 |
|
| 39 | 777777777777777777777777777777777777777 | -999999999999999999999999999999999999.9 | <-- BAD
|
| 39 | 888888888888888888888888888888888888888 | 999999999999999999999999999999999999.9 |
|
| 39 | 999999999999999999999999999999999999999 | 999999999999999999999999999999999999.9 |
|
+-----------+-----------------------------------------+-----------------------------------------+
|
SELECT LENGTH(a), a, CAST(a AS DECIMAL(37,2)) FROM t1 ORDER BY LENGTH(a), a; |
+-----------+-----------------------------------------+-----------------------------------------+
|
| LENGTH(a) | a | CAST(a AS DECIMAL(37,2)) |
|
+-----------+-----------------------------------------+-----------------------------------------+
|
| 37 | 1111111111111111111111111111111111111 | 99999999999999999999999999999999999.99 |
|
| 37 | 2222222222222222222222222222222222222 | -99999999999999999999999999999999999.99 | <-- BAD
|
| 37 | 3333333333333333333333333333333333333 | -69490335876051301300412740984348781.56 | <-- BAD
|
| 37 | 4444444444444444444444444444444444444 | 99999999999999999999999999999999999.99 |
|
| 37 | 5555555555555555555555555555555555555 | -99999999999999999999999999999999999.99 | <-- BAD
|
| 37 | 6666666666666666666666666666666666666 | -99999999999999999999999999999999999.99 | <-- BAD
|
| 37 | 7777777777777777777777777777777777777 | 99999999999999999999999999999999999.99 |
|
| 37 | 8888888888888888888888888888888888888 | -99999999999999999999999999999999999.99 | <-- BAD
|
| 37 | 9999999999999999999999999999999999999 | -99999999999999999999999999999999999.99 | <-- BAD
|
| 38 | 11111111111111111111111111111111111111 | 99999999999999999999999999999999999.99 |
|
| 38 | 22222222222222222222222222222222222222 | -99999999999999999999999999999999999.99 | <-- BAD
|
| 38 | 33333333333333333333333333333333333333 | -99999999999999999999999999999999999.99 | <-- BAD
|
| 38 | 44444444444444444444444444444444444444 | 99999999999999999999999999999999999.99 |
|
| 38 | 55555555555555555555555555555555555555 | 99999999999999999999999999999999999.99 |
|
| 38 | 66666666666666666666666666666666666666 | -99999999999999999999999999999999999.99 | <-- BAD
|
| 38 | 77777777777777777777777777777777777777 | -99999999999999999999999999999999999.99 | <-- BAD
|
| 38 | 88888888888888888888888888888888888888 | 99999999999999999999999999999999999.99 |
|
| 38 | 99999999999999999999999999999999999999 | 99999999999999999999999999999999999.99 |
|
| 39 | 111111111111111111111111111111111111111 | -99999999999999999999999999999999999.99 | <-- BAD
|
| 39 | 222222222222222222222222222222222222222 | 99999999999999999999999999999999999.99 |
|
| 39 | 333333333333333333333333333333333333333 | 99999999999999999999999999999999999.99 |
|
| 39 | 444444444444444444444444444444444444444 | -99999999999999999999999999999999999.99 | <-- BAD
|
| 39 | 555555555555555555555555555555555555555 | 99999999999999999999999999999999999.99 |
|
| 39 | 666666666666666666666666666666666666666 | 99999999999999999999999999999999999.99 |
|
| 39 | 777777777777777777777777777777777777777 | -99999999999999999999999999999999999.99 | <-- BAD
|
| 39 | 888888888888888888888888888888888888888 | 99999999999999999999999999999999999.99 |
|
| 39 | 999999999999999999999999999999999999999 | 99999999999999999999999999999999999.99 |
|
+-----------+-----------------------------------------+-----------------------------------------+
|
SELECT LENGTH(a), a, CAST(a AS DECIMAL(38,0)) FROM t1 ORDER BY LENGTH(a), a; |
+-----------+-----------------------------------------+----------------------------------------+
|
| LENGTH(a) | a | CAST(a AS DECIMAL(38,0)) |
|
+-----------+-----------------------------------------+----------------------------------------+
|
| 37 | 1111111111111111111111111111111111111 | 1111111111111111111111111111111111111 |
|
| 37 | 2222222222222222222222222222222222222 | 2222222222222222222222222222222222222 |
|
| 37 | 3333333333333333333333333333333333333 | 3333333333333333333333333333333333333 |
|
| 37 | 4444444444444444444444444444444444444 | 4444444444444444444444444444444444444 |
|
| 37 | 5555555555555555555555555555555555555 | 5555555555555555555555555555555555555 |
|
| 37 | 6666666666666666666666666666666666666 | 6666666666666666666666666666666666666 |
|
| 37 | 7777777777777777777777777777777777777 | 7777777777777777777777777777777777777 |
|
| 37 | 8888888888888888888888888888888888888 | 8888888888888888888888888888888888888 |
|
| 37 | 9999999999999999999999999999999999999 | 9999999999999999999999999999999999999 |
|
| 38 | 11111111111111111111111111111111111111 | 11111111111111111111111111111111111111 |
|
| 38 | 22222222222222222222222222222222222222 | 22222222222222222222222222222222222222 |
|
| 38 | 33333333333333333333333333333333333333 | 33333333333333333333333333333333333333 |
|
| 38 | 44444444444444444444444444444444444444 | 44444444444444444444444444444444444444 |
|
| 38 | 55555555555555555555555555555555555555 | 55555555555555555555555555555555555555 |
|
| 38 | 66666666666666666666666666666666666666 | 66666666666666666666666666666666666666 |
|
| 38 | 77777777777777777777777777777777777777 | 77777777777777777777777777777777777777 |
|
| 38 | 88888888888888888888888888888888888888 | 88888888888888888888888888888888888888 |
|
| 38 | 99999999999999999999999999999999999999 | 99999999999999999999999999999999999999 |
|
| 39 | 111111111111111111111111111111111111111 | 99999999999999999999999999999999999999 |
|
| 39 | 222222222222222222222222222222222222222 | 99999999999999999999999999999999999999 |
|
| 39 | 333333333333333333333333333333333333333 | 99999999999999999999999999999999999999 |
|
| 39 | 444444444444444444444444444444444444444 | 99999999999999999999999999999999999999 |
|
| 39 | 555555555555555555555555555555555555555 | 99999999999999999999999999999999999999 |
|
| 39 | 666666666666666666666666666666666666666 | 99999999999999999999999999999999999999 |
|
| 39 | 777777777777777777777777777777777777777 | 97213043935900850851028562914241354865 | <-- BAD
|
| 39 | 888888888888888888888888888888888888888 | 99999999999999999999999999999999999999 |
|
| 39 | 999999999999999999999999999999999999999 | 99999999999999999999999999999999999999 |
|
+-----------+-----------------------------------------+----------------------------------------+
|
SELECT LENGTH(a), a, CAST(a AS DECIMAL(38,1)) FROM t1 ORDER BY LENGTH(a), a; |
+-----------+-----------------------------------------+------------------------------------------+
|
| LENGTH(a) | a | CAST(a AS DECIMAL(38,1)) |
|
+-----------+-----------------------------------------+------------------------------------------+
|
| 37 | 1111111111111111111111111111111111111 | 1111111111111111111111111111111111111.0 |
|
| 37 | 2222222222222222222222222222222222222 | 2222222222222222222222222222222222222.0 |
|
| 37 | 3333333333333333333333333333333333333 | 3333333333333333333333333333333333333.0 |
|
| 37 | 4444444444444444444444444444444444444 | 4444444444444444444444444444444444444.0 |
|
| 37 | 5555555555555555555555555555555555555 | 5555555555555555555555555555555555555.0 |
|
| 37 | 6666666666666666666666666666666666666 | 6666666666666666666666666666666666666.0 |
|
| 37 | 7777777777777777777777777777777777777 | 7777777777777777777777777777777777777.0 |
|
| 37 | 8888888888888888888888888888888888888 | 8888888888888888888888888888888888888.0 |
|
| 37 | 9999999999999999999999999999999999999 | 9999999999999999999999999999999999999.0 |
|
| 38 | 11111111111111111111111111111111111111 | 9999999999999999999999999999999999999.9 |
|
| 38 | 22222222222222222222222222222222222222 | -9999999999999999999999999999999999999.9 | <-- BAD
|
| 38 | 33333333333333333333333333333333333333 | -694903358760513013004127409843487812.6 | <-- BAD
|
| 38 | 44444444444444444444444444444444444444 | 9999999999999999999999999999999999999.9 |
|
| 38 | 55555555555555555555555555555555555555 | -9999999999999999999999999999999999999.9 | <-- BAD
|
| 38 | 66666666666666666666666666666666666666 | -1389806717521026026008254819686975625.2 | <-- BAD
|
| 38 | 77777777777777777777777777777777777777 | 9721304393590085085102856291424135485.8 | <-- BAD
|
| 38 | 88888888888888888888888888888888888888 | -9999999999999999999999999999999999999.9 | <-- BAD
|
| 38 | 99999999999999999999999999999999999999 | -2084710076281539039012382229530463437.8 | <-- BAD
|
| 39 | 111111111111111111111111111111111111111 | 9026401034829572072098728881580647674.2 | <-- BAD
|
| 39 | 222222222222222222222222222222222222222 | 9999999999999999999999999999999999999.9 |
|
| 39 | 333333333333333333333333333333333333333 | 9999999999999999999999999999999999999.9 |
|
| 39 | 444444444444444444444444444444444444444 | 2077367447224441942057454783145769551.2 | <-- BAD
|
| 39 | 555555555555555555555555555555555555555 | 9999999999999999999999999999999999999.9 |
|
| 39 | 666666666666666666666666666666666666666 | 9999999999999999999999999999999999999.9 |
|
| 39 | 777777777777777777777777777777777777777 | -4871666140380688187983819315289108571.8 | <-- BAD
|
| 39 | 888888888888888888888888888888888888888 | 9999999999999999999999999999999999999.9 |
|
| 39 | 999999999999999999999999999999999999999 | 9999999999999999999999999999999999999.9 |
|
+-----------+-----------------------------------------+------------------------------------------+
|
SELECT LENGTH(a), a, CAST(a AS DECIMAL(38,2)) FROM t1 ORDER BY LENGTH(a), a; |
+-----------+-----------------------------------------+------------------------------------------+
|
| LENGTH(a) | a | CAST(a AS DECIMAL(38,2)) |
|
+-----------+-----------------------------------------+------------------------------------------+
|
| 37 | 1111111111111111111111111111111111111 | 999999999999999999999999999999999999.99 |
|
| 37 | 2222222222222222222222222222222222222 | -999999999999999999999999999999999999.99 | <-- BAD
|
| 37 | 3333333333333333333333333333333333333 | -69490335876051301300412740984348781.56 | <-- BAD
|
| 37 | 4444444444444444444444444444444444444 | 999999999999999999999999999999999999.99 |
|
| 37 | 5555555555555555555555555555555555555 | -999999999999999999999999999999999999.99 | <-- BAD
|
| 37 | 6666666666666666666666666666666666666 | -138980671752102602600825481968697563.12 | <-- BAD
|
| 37 | 7777777777777777777777777777777777777 | 972130439359008508510285629142413547.88 | <-- BAD
|
| 37 | 8888888888888888888888888888888888888 | -999999999999999999999999999999999999.99 | <-- BAD
|
| 37 | 9999999999999999999999999999999999999 | -208471007628153903901238222953046344.68 | <-- BAD
|
| 38 | 11111111111111111111111111111111111111 | 902640103482957207209872888158064767.32 | <-- BAD
|
| 38 | 22222222222222222222222222222222222222 | -999999999999999999999999999999999999.99 |
|
| 38 | 33333333333333333333333333333333333333 | -694903358760513013004127409843487812.60 | <-- BAD
|
| 38 | 44444444444444444444444444444444444444 | 207736744722444194205745478314576954.72 | <-- BAD
|
| 38 | 55555555555555555555555555555555555555 | 999999999999999999999999999999999999.99 |
|
| 38 | 66666666666666666666666666666666666666 | -999999999999999999999999999999999999.99 | <-- BAD
|
| 38 | 77777777777777777777777777777777777777 | -487166614038068818798381931528910857.88 | <-- BAD
|
| 38 | 88888888888888888888888888888888888888 | 415473489444888388411490956629153909.44 | <-- BAD
|
| 38 | 99999999999999999999999999999999999999 | 999999999999999999999999999999999999.99 |
|
| 39 | 111111111111111111111111111111111111111 | -999999999999999999999999999999999999.99 | <-- BAD
|
| 39 | 222222222222222222222222222222222222222 | 999999999999999999999999999999999999.99 |
|
| 39 | 333333333333333333333333333333333333333 | 999999999999999999999999999999999999.99 |
|
| 39 | 444444444444444444444444444444444444444 | -999999999999999999999999999999999999.99 | <-- BAD
|
| 39 | 555555555555555555555555555555555555555 | 999999999999999999999999999999999999.99 |
|
| 39 | 666666666666666666666666666666666666666 | 999999999999999999999999999999999999.99 |
|
| 39 | 777777777777777777777777777777777777777 | -999999999999999999999999999999999999.99 | <-- BAD
|
| 39 | 888888888888888888888888888888888888888 | 999999999999999999999999999999999999.99 |
|
| 39 | 999999999999999999999999999999999999999 | 999999999999999999999999999999999999.99 |
|
+-----------+-----------------------------------------+------------------------------------------+
|
Attachments
Issue Links
- is blocked by
-
MCOL-4531 New string-to-decimal conversion implementation
- Closed