matrixorigin / matrixorigin/matrixone

[Bug]: ADDTIME and SUBTIME misclassify long TIME strings as DATETIME

Open
#28,147 0 comments 0 reactions 1 assignee Claimed by @jiangxinmeng1 View on GitHub
kind/bug needs-triage
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

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.