能否将`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
相关产品推荐
相关产品推荐

