如何计算时间戳天数差?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.
相关产品推荐
相关产品推荐

