pingcap / pingcap/tidb

cast datetime to decimal doesn't work correctly

Open
#61,036 0 comments 0 reactions 0 assignees View on GitHub
severity/moderate sig/execution type/bug
Dominant language
Go
Stars
40.5k
Forks
6.2k
PR merge metrics
PR metrics pending

Description

## Bug Report

Please answer these questions before submitting your issue. Thanks!

### 1. Minimal reproduce step (Required)
```
select cast('01-01-01' as datetime),cast(cast('01-01-01' as datetime) as decimal(16,2)),least(cast('01-01-01' as datetime), '01-01-02'),cast(least(cast('01-01-01' as datetime), '01-01-02') as decimal(16,2));

```

### 2. What did you expect to see? (Required)
results from mysql:
```

MySQL [testdb_1746708190081]> select cast('01-01-01' as datetime),cast(cast('01-01-01' as datetime) as decimal(16,2)),least(cast('01-01-01' as datetime), '01-01-02'),cast(least(cast('01-01-01' as datetime), '01-01-02') as decimal(16,2));
+------------------------------+-----------------------------------------------------+-------------------------------------------------+------------------------------------------------------------------------+
| cast('01-01-01' as datetime) | cast(cast('01-01-01' as datetime) as decimal(16,2)) | least(cast('01-01-01' as datetime), '01-01-02') | cast(least(cast('01-01-01' as datetime), '01-01-02') as decimal(16,2)) |
+------------------------------+-----------------------------------------------------+-------------------------------------------------+------------------------------------------------------------------------+
| 2001-01-01 00:00:00 | 20010101000000.00 | 2001-01-01 00:00:00 | 20010101000000.00 |
+------------------------------+-----------------------------------------------------+-------------------------------------------------+------------------------------------------------------------------------+
1 row in set (0.00 sec)
```

### 3. What did you see instead (Required)
results from tidb

```
MySQL [testdb_1746708190081]> select cast('01-01-01' as datetime),cast(cast('01-01-01' as datetime) as decimal(16,2)),least(cast('01-01-01' as datetime), '01-01-02'),cast(least(cast('01-01-01' as datetime), '01-01-02') as decimal(16,2));
+------------------------------+-----------------------------------------------------+-------------------------------------------------+------------------------------------------------------------------------+
| cast('01-01-01' as datetime) | cast(cast('01-01-01' as datetime) as decimal(16,2)) | least(cast('01-01-01' as datetime), '01-01-02') | cast(least(cast('01-01-01' as datetime), '01-01-02') as decimal(16,2)) |
+------------------------------+-----------------------------------------------------+-------------------------------------------------+------------------------------------------------------------------------+
| 2001-01-01 00:00:00 | 20010101000000.00 | 2001-01-01 00:00:00 | 2001.00 |
+------------------------------+-----------------------------------------------------+-------------------------------------------------+------------------------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

```

### 4. What is your TiDB version? (Required)

```
MySQL [testdb_1746708190081]> select tidb_version();
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tidb_version() |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Release Version: v8.5.1
Edition: Community
Git Commit Hash: fea86c8e35ad4a86a5e1160701f99493c2ee547c
Git Branch: HEAD
UTC Build Time: 2025-01-16 07:38:34
GoVersion: go1.23.4
Race Enabled: false
Check Table Before Drop: false
Store: tikv |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.