【发布时间】:2016-10-27 23:34:07
【问题描述】:
我目前正在使用本书 Ben-Gan, Itzik 学习 SQL Server。 T-SQL 基础。下面是一个查询,用于选择月底下的订单。 (我知道函数EOMONTH()也可以用)
SELECT orderid, orderdate, custid, empid
FROM Sales.Orders
WHERE orderdate = DATEADD( month, DATEDIFF( month, '18991231', orderdate), '18991231');
作者的解释是:
这个表达式首先计算整体的差异 某个月的最后一天(1899 年 12 月 31 日,在 本例)和指定的日期。将此差异称为差异。经过 将差异月份添加到锚定日期,您将获得最后一天 目标月份。
但是,我仍然对它的实际工作方式有些困惑。有人会解释一下吗?
【问题讨论】:
-
当您深入了解数据库的报告方面时,您会发现数据仓库。然后你会发现这个叫做日历表的东西,它是解决这个问题的另一种方法:创建一个表,列出每天的所有有用属性以及该日期的每个有用属性,包括该月的最后一天是什么。由于您正在学习 SQL Server,因此看到解决同一问题的两种完全不同(但都是完全有效)的方法对您很有启发。
标签: sql sql-server tsql