SQL 提供了强大的时间和日期操作工具,主要通过内置函数和运算符来处理提取、算术和格式化。大多数 SQL 方言都支持标准日期/时间数据类型,如 DATE
、TIME
、DATETIME
和 TIMESTAMP
,以及与之交互的函数。 例如,CURRENT_DATE
或 GETDATE()
检索当前日期,而 EXTRACT(YEAR FROM date_column)
隔离特定组件,如年或月。 日期算术运算使用诸如 +
或 -
等运算符以及间隔(例如,PostgreSQL 中的 date_column + INTERVAL '7 days'
)或 SQL Server 中的 DATEADD(day, 7, date_column)
等函数执行。 这些操作支持诸如计算截止日期或过滤日期范围内的记录等任务。 重要的是要注意数据库之间的语法差异 - 例如,MySQL 使用 DATE_ADD()
,而 PostgreSQL 依赖于间隔文字。
格式化和时区处理对于显示或转换日期至关重要。 诸如 PostgreSQL 中的 TO_CHAR(date_column, 'YYYY-MM-DD')
或 MySQL 中的 DATE_FORMAT(date_column, '%Y-%m-%d')
等函数将日期转换为可读的字符串。 时区使用诸如 MySQL 中的 CONVERT_TZ(date_column, 'UTC', 'America/New_York')
或 PostgreSQL 中的 AT TIME ZONE
子句等函数进行管理。 例如,SELECT created_at AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/London'
将 UTC 时间戳转换为伦敦时间。 在处理全局数据时,处理时区可确保一致性,尽管开发人员必须确保正确配置数据库服务器以避免不匹配。 除非业务逻辑另有要求,否则始终以 UTC 格式存储日期。
计算间隔和持续时间是另一个常见的用例。 诸如 SQL Server 中的 DATEDIFF(day, start_date, end_date)
或 PostgreSQL 中的 AGE(end_date, start_date)
等函数计算日期之间的差异。 例如,SELECT DATEDIFF(day, '2023-01-01', '2023-01-10')
返回 9 天。 若要生成时间序列数据(例如,每日报告),请使用递归 CTE 或数据库特定函数,如 PostgreSQL 的 GENERATE_SERIES('2023-01-01'::DATE, '2023-01-10', '1 day')
。 可以使用 DATE_TRUNC('month', date_column)
调整时间戳精度,以按月对记录进行分组。 始终测试边缘情况,例如闰年或夏令时转换,这些情况会影响间隔计算。 这些工具共同实现了应用程序中的精确时间分析、调度和报告。