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

如何在SQL中新增列计算START与END日期的差值

实现方案:计算日期差值并新增列

根据你的需求,分两种场景给出实现方案,覆盖主流数据库:

一、查询时临时生成差值列(不修改表结构)

如果只是需要在查询结果中展示日期差,不需要永久修改表结构,直接在SELECT语句中计算即可:

MySQL

使用DATEDIFF()函数(结束日期在前,返回天数差):

SELECT 
    *,
    DATEDIFF(`END DATE`, `START DATE`) AS date_diff
FROM your_table_name;

PostgreSQL

可以直接用日期相减返回间隔,或者用AGE()函数提取天数:

SELECT 
    *,
    -- 返回带单位的间隔(如 '5 days')
    (`END DATE` - `START DATE`) AS date_diff,
    -- 仅返回天数数值
    EXTRACT(DAY FROM AGE(`END DATE`, `START DATE`))::INT AS date_diff_days
FROM your_table_name;

SQL Server

DATEDIFF()参数顺序为「单位、开始日期、结束日期」:

SELECT 
    *,
    DATEDIFF(day, [START DATE], [END DATE]) AS date_diff
FROM your_table_name;

二、永久新增列并填充差值

如果需要把日期差作为永久列存储在表中,分两步操作:

MySQL

-- 1. 新增存储差值的列
ALTER TABLE your_table_name ADD COLUMN date_diff INT;
-- 2. 计算并填充日期差
UPDATE your_table_name SET date_diff = DATEDIFF(`END DATE`, `START DATE`);

PostgreSQL

-- 1. 新增存储差值的列
ALTER TABLE your_table_name ADD COLUMN date_diff INT;
-- 2. 计算并填充日期差
UPDATE your_table_name SET date_diff = EXTRACT(DAY FROM AGE(`END DATE`, `START DATE`))::INT;

SQL Server

-- 1. 新增存储差值的列
ALTER TABLE your_table_name ADD date_diff INT;
-- 2. 计算并填充日期差
UPDATE your_table_name SET date_diff = DATEDIFF(day, [START DATE], [END DATE]);

补充说明

  • 如果需要计算小时、分钟等其他单位的差值,只需替换对应函数的单位参数即可。比如MySQL用TIMESTAMPDIFF(hour, START DATE, END DATE),SQL Server把DATEDIFF的day换成hour。
  • 注意字段名包含空格,需要用反引号(MySQL)、方括号(SQL Server)或双引号(PostgreSQL需开启标准标识符模式)包裹,避免语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:17:14