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

如何计算时间戳天数差?90天以上未归还租赁数据入库咨询

最优实现方案:筛选逾期超90天的租赁数据并插入表

原SQL存在的核心问题

  • 插入列包含store_id,但查询语句未从customer表选取该字段,会触发列数不匹配错误
  • 判断return_date为空时使用= NULL,SQL中空值判断必须用IS NULL
  • 日期差计算的写法兼容性差,DATEDIFF语法因数据库类型而异,直接用日期加减更通用

修正后的通用兼容SQL

-- 确保目标表结构正确
CREATE TABLE IF NOT EXISTS detailed(
    customer_id smallint NOT NULL,
    store_id smallint NOT NULL,
    first_name varchar(45),
    last_name varchar(45),
    email varchar(50),
    rental_id INTEGER NOT NULL,
    rental_date timestamp without time zone,
    inventory_id INTEGER NOT NULL
);

-- 插入逾期超90天的未归还租赁数据
INSERT INTO detailed(
    customer_id, store_id, first_name, last_name, email, rental_id, rental_date, inventory_id
) 
SELECT 
    c.customer_id,
    c.store_id, -- 补充缺失的store_id字段
    c.first_name,
    c.last_name,
    c.email,
    r.rental_id,
    r.rental_date,
    r.inventory_id
FROM customer c
INNER JOIN rental r ON c.customer_id = r.customer_id
WHERE 
    r.return_date IS NULL -- 正确的空值判断逻辑
    AND CURRENT_DATE > r.rental_date + INTERVAL '90 days'; -- 标准SQL日期比较,兼容多数数据库

不同数据库的适配写法

如果需要针对特定数据库优化:

  • MySQL:可替换日期条件为DATEDIFF(CURRENT_DATE, r.rental_date) > 90
  • PostgreSQL:也可使用AGE(CURRENT_DATE, r.rental_date) > INTERVAL '90 days'或DATE_PART('day', CURRENT_DATE - r.rental_date) > 90
  • SQL Server:用DATEDIFF(day, r.rental_date, CURRENT_DATE) > 90,空值判断仍用IS NULL

内容的提问来源于stack exchange,提问作者Rowell C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:09:58