tidb icon indicating copy to clipboard operation
tidb copied to clipboard

`TIMESTAMPADD` does not return correct number of fractional digit in datetime expression

Open espresso98 opened this issue 3 years ago • 4 comments

Bug Report

1. Minimal reproduce step

SET sql_mode='';
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (s1 DATETIME(2));
INSERT INTO t1 VALUES (TIMESTAMP '0001-01-01 00:00:00.05');
SELECT TIMESTAMPADD(second, 1, s1) FROM t1;
DROP TABLE t1;
SELECT TIMESTAMPADD(second, 1.1, '2011-05-18 16:17:11.0');
SET sql_mode=default;

2. What did you expect to see?

mysql> SELECT TIMESTAMPADD(second, 1, s1) FROM t1;
+-----------------------------+
| TIMESTAMPADD(second, 1, s1) |
+-----------------------------+
| 0001-01-01 00:00:01.05      |
+-----------------------------+

mysql> SELECT TIMESTAMPADD(second, 1.1, '2011-05-18 16:17:11.0');
+----------------------------------------------------+
| TIMESTAMPADD(second, 1.1, '2011-05-18 16:17:11.0') |
+----------------------------------------------------+
| 2011-05-18 16:17:12.100000                         |
+----------------------------------------------------+

3. What did you see instead

tidb> SELECT TIMESTAMPADD(second, 1, s1) FROM t1;
+-----------------------------+
| TIMESTAMPADD(second, 1, s1) |
+-----------------------------+
| 0001-01-01 00:00:01         |
+-----------------------------+

tidb> SELECT TIMESTAMPADD(second, 1.1, '2011-05-18 16:17:11.0');
+----------------------------------------------------+
| TIMESTAMPADD(second, 1.1, '2011-05-18 16:17:11.0') |
+----------------------------------------------------+
| 2011-05-18 16:17:12                                |
+----------------------------------------------------+

4. What is your TiDB version?

tidb_version(): Release Version: v5.5.0-alpha-105-gaabd4e04d
Edition: Community
Git Commit Hash: aabd4e04d994eb91663abaa80865daec4cf970a6
Git Branch: master
UTC Build Time: 2022-01-13 05:36:36
GoVersion: go1.17.2
Race Enabled: false
TiKV Min Version: v3.0.0-60965b006877ca7234adaced7890d7b029ed1306
Check Table Before Drop: false

espresso98 avatar Jan 19 '22 03:01 espresso98

fsp lost

MySQL [email protected]:test> SELECT TIMESTAMPADD(second, 1, "2021-07-08 16:30:01.0001");
+-----------------------------------------------------+
| TIMESTAMPADD(second, 1, "2021-07-08 16:30:01.0001") |
+-----------------------------------------------------+
| 2021-07-08 16:30:02                                 |
+-----------------------------------------------------+

aytrack avatar Jan 19 '22 08:01 aytrack

/assign

xzhangxian1008 avatar Aug 23 '22 15:08 xzhangxian1008

/unassign

xzhangxian1008 avatar Sep 20 '22 05:09 xzhangxian1008

TiDB treats all string literals as int64, so all the fractional digits are lost. reference

birdstorm avatar Sep 20 '22 08:09 birdstorm