You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将`0000-00-00`作为日期单位元?SQL日期类型运算是否支持单位元?

SQL中DATE/DATETIME/TIMESTAMP的运算单位元实现

先理清楚:DATE、DATETIME、TIMESTAMP这类类型的「加法」逻辑和TIME不一样——TIME加的是时间间隔,但DATE/DATETIME/TIMESTAMP的加法操作,本质上也是加时间间隔,直接加两个同类型的日期值在大部分SQL里都会报错,语法本身不支持这种操作。不过如果要找一个「和任何日期/时间类型相加后,结果还是原日期/时间」的非空单位元,可以按类型来实现:

1. DATE类型

DATE的加法一般是搭配INTERVAL(时间间隔)来用,对应的单位元就是INTERVAL '0' DAY,举个例子:

SELECT DATE '2024-05-20' + INTERVAL '0' DAY;
-- 输出结果还是2024-05-20

要是你硬要找一个DATE类型的值当单位元(比如某些场景下把日期转成数值相加),有些数据库(比如MySQL)支持'0000-00-00'这个零日期,但不推荐——很多现代数据库默认禁用这个值,而且不符合SQL标准,兼容性很差。优先用间隔类型的0值才是合理的。

2. DATETIME和TIMESTAMP类型

这俩的加法逻辑和DATE一致,也是加INTERVAL,对应的单位元就是INTERVAL '0' SECOND(或者用INTERVAL '0' DAY也一样,0天等于0秒),例子如下:

-- DATETIME示例
SELECT DATETIME '2024-05-20 14:30:00' + INTERVAL '0' SECOND;
-- 输出还是2024-05-20 14:30:00

-- TIMESTAMP示例
SELECT TIMESTAMP '2024-05-20 14:30:00' + INTERVAL '0' SECOND;
-- 输出还是原时间戳

如果是某些数据库里支持把日期转成epoch秒数(数值)来相加,那单位元就是UTC的0秒时间戳'1970-01-01 00:00:00',但这属于数值运算范畴,不是原生日期类型的加法操作。

不同数据库的小差异

  • PostgreSQL:用INTERVAL '0 day'这种写法
  • MySQL:用INTERVAL 0 DAY(不需要引号)
  • SQL Server:没有直接的日期+间隔语法,得用DATEADD(day, 0, @your_date)来实现等效的“加单位元”效果

内容的提问来源于stack exchange,提问作者David542

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:53:09