SQL Server与Oracle实现数据日报和月报的SQL写法

远山来客
远山来客
发布时间:2026-10-13| 4人浏览过
原创

在数据库开发中,生成日报和月报是常见的需求。本文将分别展示在SQL Server和Oracle数据库中,如何通过SQL语句筛选并汇总特定日期(如某一天或某一个月)的数据。

实现日报功能的SQL语法

日报通常指对某一特定天(例如 YYYY-MM-DD)的数据进行统计。核心逻辑是通过日期比较运算符锁定单日范围,并对相关字段进行分组求和。

第1步:SQL Server 日报查询

目的:查询指定日期内不同客户的订单数量。

关键参数:

  • 日期格式化:CONVERT(CHAR(10), Order_Date, 120),将日期转换为 "YYYY-MM-DD" 格式字符串。
  • 时间范围判断:使用 >= 和 < 精确锁定单日(左闭右开),避免时分秒干扰。
-- SQL SERVER 日报示例
-- 查询指定日期(如 2009-01-01)当天客户 A1, A2, A3 的订单数量
SELECT Cust_Name,
       CONVERT(CHAR(10), Order_Date, 120) AS Order_Date,
       SUM(Qty) AS Qty
FROM Orders_Big
WHERE 1=1
  AND Cust_Name IN ('A1', 'A2', 'A3')
  AND Order_Date >= '2009-01-01'
  AND Order_Date < '2009-01-02'
GROUP BY Cust_Name,
         CONVERT(CHAR(10), Order_Date, 120)
ORDER BY Order_Date, Cust_Name;

注意:虽然可以使用 BETWEEN,但推荐显式使用 >= 和 <,以明确排除结束日期的下一天瞬间。

第2步:Oracle 日报查询

目的:同上,但在 Oracle 环境下处理日期类型。

关键参数:

  • 方法一:使用 TO_CHAR(Order_Date, 'YYYY-MM-DD') 转为字符串匹配。
  • 方法二:使用 TRUNC(Order_Date) 截断时分秒,保留到天级别。
  • 常量写法:Oracle 推荐使用 DATE'2009-01-01' 标准字面量。
-- ORACLE 日报示例
SELECT Cust_Name,
       TO_CHAR(Order_Date, 'YYYY-MM-DD') AS Order_Date, -- 方法一
       SUM(Qty) AS Qty
FROM Orders_Big
WHERE 1=1
  AND Cust_Name IN ('A1', 'A2', 'A3')
  AND Order_Date >= DATE '2009-01-01'
  AND Order_Date < DATE '2009-01-02'
GROUP BY Cust_Name,
         TO_CHAR(Order_Date, 'YYYY-MM-DD') -- 需与 SELECT 保持一致
ORDER BY Order_Date, Cust_Name;

实现月报功能的SQL语法

月报需要将同一月份的数据合并。策略是将日期截断至年月维度(如 "YYYY-MM"),并按此维度分组。

第3步:SQL Server 月报查询

目的:按月份汇总客户订单。

操作细节:

  • 年月格式化:CONVERT(CHAR(7), Order_Date, 120) 输出 "YYYY-MM"。
  • 辅助字段:若需展示该月的第一天日期,可拼接 -01 并转回 DATETIME。
-- SQL SERVER 月报示例
SELECT Cust_Name,
       CONVERT(CHAR(7), Order_Date, 120) AS Order_YrMs,
       CAST(CONVERT(CHAR(7), Order_Date, 120) + '-01' AS DATETIME) AS FirstDayOfMonth,
       SUM(Qty) AS Qty
FROM Orders_Big
WHERE 1=1
  AND Cust_Name IN ('A1', 'A2', 'A3')
  AND Order_Date >= '2009-01-01'
  AND Order_Date < '2009-02-01' -- 下个月的第一天
GROUP BY Cust_Name,
         CONVERT(CHAR(7), Order_Date, 120)
ORDER BY Order_YrMs, Cust_Name;

第4步:Oracle 月报查询

目的:Oracle 环境下的按月汇总。

操作细节:

  • 方法一:TO_CHAR(Order_Date, 'YYYY-MM')。
  • 方法二:TRUNC(Order_Date, 'MM') 直接截断到当月第一天。
-- ORACLE 月报示例
SELECT Cust_Name,
       TO_CHAR(Order_Date, 'YYYY-MM') AS Order_YrMs, -- 方法一
       SUM(Qty) AS Qty
FROM Orders_Big
WHERE 1=1
  AND Cust_Name IN ('A1', 'A2', 'A3')
  AND Order_Date >= DATE '2009-01-01'
  AND Order_Date < DATE '2009-02-01'
GROUP BY Cust_Name,
         TO_CHAR(Order_Date, 'YYYY-MM')
ORDER BY Order_YrMs, Cust_Name;

总结

以上实现了SQL Server和Oracle数据库中日报、月报的基础查询逻辑。关键在于利用各自的日期函数(CONVERT/TO_CHAR/TRUNC)统一时间精度,并配合严格的时间区间过滤。
以上就是SQL Server与Oracle实现数据日报和月报的详细内容,更多关于SQL数据库程序设计资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。