SQL技术问询:如何筛选scheduled_sales_date中日≥25的记录?
筛选日期日部分≥25的数据记录
原始数据表
reporting_month scheduled_sales_date 202212 20230117 202212 20230106 202212 20230125 202212 20230130 202212 20230101 202212 20230129 202212 20230114 202212 20230122 202212 20230129
预期筛选结果
reporting_month scheduled_sales_date 202212 20230125 202212 20230130 202212 20230129 202212 20230129
实现方案
根据你使用的数据库,选择对应的SQL语句:
方法1:直接提取日期数字的最后两位(通用高效)
如果scheduled_sales_date是数字类型(INT/BIGINT),可以通过取模或字符串截取快速拿到日部分:
-- 取模法(仅适用于数字类型) SELECT reporting_month, scheduled_sales_date FROM your_table_name WHERE MOD(scheduled_sales_date, 100) >= 25; -- 字符串截取法(数字/字符串类型通用) SELECT reporting_month, scheduled_sales_date FROM your_table_name WHERE RIGHT(CAST(scheduled_sales_date AS CHAR), 2) >= '25';
方法2:转成日期类型后提取日(严谨规范)
把数字格式的日期转为标准日期类型,再用数据库自带函数提取日部分,能自动校验日期合法性:
- MySQL
SELECT reporting_month, scheduled_sales_date FROM your_table_name WHERE DAY(STR_TO_DATE(scheduled_sales_date, '%Y%m%d')) >= 25;
- SQL Server
SELECT reporting_month, scheduled_sales_date FROM your_table_name WHERE DAY(CAST(CONVERT(varchar(8), scheduled_sales_date) AS DATE)) >= 25;
- PostgreSQL
SELECT reporting_month, scheduled_sales_date FROM your_table_name WHERE EXTRACT(DAY FROM TO_DATE(scheduled_sales_date::TEXT, 'YYYYMMDD')) >= 25;
补充说明
- 方法1无需类型转换,性能更好,适合数据量大的场景;
- 方法2能过滤无效日期(比如
20230230这类非法值),数据严谨性更高。
内容的提问来源于stack exchange,提问作者Thirdy Man
相关产品推荐
相关产品推荐

