matrixorigin / matrixorigin/matrixone
[Bug]: ADDTIME and SUBTIME misclassify long TIME strings as DATETIME
- Dominant language
- Go
- Stars
- 1.9k
- Forks
- 311
- Avg merge
- 1d 3h
- Merged PRs (30d)
- 768
Description
## 现象
在 MatrixOne main `99ed717b769e261b842c2f17345bd65865fc1470`,`ADDTIME()`/`SUBTIME()` 接收超大小时的时间字符串时错误推断为日期时间:
```sql
SELECT ADDTIME('838:59:59', '00:00:01');
-- 2026-10-08 23:00:00 (异常)
SELECT SUBTIME('-838:59:59', '00:00:01');
-- 2026-07-31 01:00:00 (异常)
```
同样的值先转为 `TIME(6)` 列或显式 `CAST` 后,结果为 `839:00:00.000000` / `-838:59:58.000000`;`TIMEDIFF()` 对同一字符串边界也返回时间结果。因此问题限定在 `ADDTIME`/`SUBTIME` 的字符串输入类型推断,而非时间加法本身。
此外,`CREATE TABLE ... AS SELECT ADDTIME('838:59:59','00:00:01')` 将结果列物化为 `DATETIME`,进一步固化错误类型。
## 期望
`ADDTIME(expr1,expr2)` 的第一个参数为 `TIME` 形式字符串时,应按时间间隔解析并返回时间结果;不能因为小时数超过 24 就改按日期时间解释。表达式结果可以超过 TIME 列存储上限,但类型和数值语义应保持一致。
## 影响
持续时间计算、报表和 CTAS 会把合法的长时间间隔变成错误日期,导致后续比较、排序和落盘类型错误。
## 复现信息
- MatrixOne main: `99ed717b769e261b842c2f17345bd65865fc1470`
- 重复执行 3 次,结果一致
Contributor guide
Assessment
This issue has not been assessed yet.