Skip to content

5.1 — 日期处理

你将学习

  • 如何在SQL中筛选和格式化日期
  • 常用的日期函数和比较操作
  • 与Excel日期处理的比较

在SQL中处理日期

以下是示例中使用的销售数据:

ProductAmountSaleDate
Apples1202024-05-01
Apples902024-05-15
Oranges802024-05-03
Oranges702024-06-10
Bananas602024-05-20
Bananas502024-06-05
Pears402024-05-25
Pears302024-06-15

在Excel中,您可能使用筛选器或函数如YEAR()MONTH()或自定义日期格式。SQL提供类似的函数,并允许您按日期范围筛选数据。

示例:筛选2024年5月的销售数据

sql
SELECT *
FROM sales
WHERE SaleDate >= Date '2024-05-01' AND SaleDate <= Date '2024-05-31';

示例:提取年份和月份

sql
SELECT SaleDate, YEAR(SaleDate) AS Sale_Year, MONTH(SaleDate) AS Sale_Month
FROM sales;
  • 大多数数据库支持DateYEAR()MONTH()DAY()等函数(语法可能有所不同)

按月或年分组数据

您可按月或年分组数据进行趋势分析:

sql
SELECT YEAR(SaleDate) AS Sale_Year, MONTH(SaleDate) AS Sale_Month, SUM(Amount) AS Total_Sales
FROM sales
GROUP BY YEAR(SaleDate), MONTH(SaleDate)
ORDER BY Sale_Year, Sale_Month;

日期格式化

某些数据库允许您格式化日期显示:

sql
SELECT DATE_FORMAT(SaleDate, '%Y-%m') AS YearMonth, SUM(Amount) AS Total
FROM sales
GROUP BY YearMonth;
-- PostgreSQL/Oracle/Teradata: TO_CHAR(SaleDate, 'YYYY-MM')
-- Snowflake: TO_VARCHAR(SaleDate, 'YYYY-MM')
-- Databricks (Spark SQL): DATE_FORMAT(SaleDate, 'yyyy-MM')

(语法可能因数据库而异:请查阅数据库文档获取详细信息)

各数据库常用日期函数

目的PostgreSQL / Oracle / TeradataSQL ServerDatabricks (Spark SQL)Snowflake / BigQueryMySQL / MariaDB
提取年份EXTRACT(YEAR FROM SaleDate)TO_CHAR(SaleDate, 'YYYY')YEAR(SaleDate)year(SaleDate)YEAR(SaleDate)YEAR(SaleDate)
提取月份EXTRACT(MONTH FROM SaleDate)TO_CHAR(SaleDate, 'MM')MONTH(SaleDate)month(SaleDate)MONTH(SaleDate)MONTH(SaleDate)
提取日期EXTRACT(DAY FROM SaleDate)TO_CHAR(SaleDate, 'DD')DAY(SaleDate)day(SaleDate)DAY(SaleDate)DAY(SaleDate)
格式化为YYYY-MMTO_CHAR(SaleDate, 'YYYY-MM')FORMAT(SaleDate, 'yyyy-MM')date_format(SaleDate, 'yyyy-MM')TO_VARCHAR(SaleDate, 'YYYY-MM')DATE_FORMAT(SaleDate, '%Y-%m')
添加天数SaleDate + n (天) 或 ADD_DAYS(SaleDate, n)DATEADD(day, n, SaleDate)date_add(SaleDate, n)DATEADD(day, n, SaleDate)DATE_ADD(SaleDate, INTERVAL n DAY)
当前日期CURRENT_DATEGETDATE()current_date()CURRENT_DATE()CURDATE()

注意:语法可能因数据库版本而异。请务必查阅数据库文档获取详细信息。

计算两个日期之间的天数

您可以使用内置函数计算两个日期之间的天数差。这类似于Excel中的日期相减。

示例:

数据库语法示例
PostgreSQL / Oracle / TeradataSELECT EndDate - StartDate AS Days_Diff FROM sales;
SQL ServerSELECT DATEDIFF(day, StartDate, EndDate) AS Days_Diff FROM sales;
Databricks (Spark SQL)SELECT datediff(EndDate, StartDate) AS Days_Diff FROM sales;
Snowflake / BigQuerySELECT DATEDIFF(day, StartDate, EndDate) AS Days_Diff FROM sales;
MySQL / MariaDBSELECT DATEDIFF(EndDate, StartDate) AS Days_Diff FROM sales;
  • StartDateEndDate替换为实际的列名
  • 结果为两个日期之间的天数

注意:某些数据库中参数的顺序可能不同。请务必查阅数据库文档获取详细信息。

关键要点

  • SQL可以像Excel一样筛选、提取和按日期分组数据
  • 日期函数和格式可能因数据库而异

下一步

接下来,您将学习如何处理数据中的缺失值(NULL)。