如何在SQL中筛选日期差大于10天的数据并添加列?
修复查询语句 + 添加列的解决方案
让我来帮你搞定这两个问题,一步步拆解:
一、修复日期筛选的查询语句
你的原查询没生效,核心问题是日期差值的计算方式错误,而且没考虑Date2为Null的情况,我整理了常见数据库的正确写法:
问题分析
date(Date2-Date1)这种写法无法得到两个日期的天数差,不同数据库有专门的日期差函数或计算逻辑;- 当
Date2为Null时,差值计算结果也是Null,不会满足>10的条件,显式加上Date2 IS NOT NULL会更严谨; date(Date1)>'2017-05-01'可以简化为Date1 > '2017-05-01',日期类型直接和标准格式的字符串比较即可。
正确查询语句
MySQL
SELECT ID FROM table_1 WHERE DATEDIFF(Date2, Date1) > 10 AND Date1 > '2017-05-01' AND Date2 IS NOT NULL;
SQL Server
SELECT ID FROM table_1 WHERE DATEDIFF(day, Date1, Date2) > 10 AND Date1 > '2017-05-01' AND Date2 IS NOT NULL;
Oracle
SELECT ID FROM table_1 WHERE (Date2 - Date1) > 10 AND Date1 > TO_DATE('2017-05-01', 'YYYY-MM-DD') AND Date2 IS NOT NULL;
二、给表添加新列的方法
用ALTER TABLE语句就能完成,你可以根据需求指定列的类型、是否允许Null、默认值等,以下是常见场景的写法:
基础添加(允许Null)
MySQL/SQL Server
ALTER TABLE table_1 ADD COLUMN new_column INT; -- 替换INT为你需要的类型,比如VARCHAR(50)、DATE等
Oracle
ALTER TABLE table_1 ADD new_column INT;
添加带默认值且不允许Null的列
MySQL/SQL Server
ALTER TABLE table_1 ADD COLUMN new_column VARCHAR(50) NOT NULL DEFAULT '默认值';
Oracle
ALTER TABLE table_1 ADD new_column VARCHAR2(50) DEFAULT '默认值' NOT NULL;
内容的提问来源于stack exchange,提问作者Roy1245
相关产品推荐
相关产品推荐

