Sql 计算月底下的订单
我目前正在使用Ben Gan,Itzik这本书学习SQL Server。T-SQL基础知识。下面是一个用于选择月末下单的查询。(我知道函数EOMONTH()也可以使用) 作者的解释是: 此表达式首先根据整体计算差异 在某个月的最后一天(1899年12月31日,在 (本案例)和指定日期。称之为差异 将不同的月份添加到锚定日期,您将获得锚定日期的最后一天 目标月Sql 计算月底下的订单,sql,sql-server,tsql,Sql,Sql Server,Tsql,我目前正在使用Ben Gan,Itzik这本书学习SQL Server。T-SQL基础知识。下面是一个用于选择月末下单的查询。(我知道函数EOMONTH()也可以使用) 作者的解释是: 此表达式首先根据整体计算差异 在某个月的最后一天(1899年12月31日,在 (本案例)和指定日期。称之为差异 将不同的月份添加到锚定日期,您将获得锚定日期的最后一天 目标月 然而,我仍然有点困惑它到底是如何工作的。有人能解释一下吗 我自己尝试了这个问题,似乎已经掌握了窍门。这是我写的,以防其他人感兴趣 SELE
然而,我仍然有点困惑它到底是如何工作的。有人能解释一下吗 我自己尝试了这个问题,似乎已经掌握了窍门。这是我写的,以防其他人感兴趣
SELECT DATEADD(month, DATEDIFF(MONTH, '20160131', '20160201'), '20160131');
结果:
2016-02-29 00:00:00.000
因此,我的解释是,将一个或多个“月”添加到某个特定日期(该月的最后一天是31)将始终返回该日期为该月最后一天的日期。如果这句话有意义的话……我自己尝试了这个问题,似乎已经掌握了窍门。这是我写的,以防其他人感兴趣
SELECT DATEADD(month, DATEDIFF(MONTH, '20160131', '20160201'), '20160131');
select DATEDIFF(MONTH, '20160131', '20160201')
结果:
2016-02-29 00:00:00.000
因此,我的解释是,将一个或多个“月”添加到某个特定日期(该月的最后一天是31)将始终返回该日期为该月最后一天的日期。如果这句话有意义的话
select DATEDIFF(MONTH, '20160131', '20160201')
给我们一个月的时间
SELECT DATEADD(month, 1, '20160131')
给我们2016-02-29 00:00:00.000
没关系
给我们一个月的时间
SELECT DATEADD(month, 1, '20160131')
给我们2016-02-29 00:00:00.000
没关系这似乎是一种相当神秘的方法。代码所做的是计算自某个月的最后一天起的月数。然后,它将这个月数添加到该日期。由于
dateadd()
的规则,月份仍然是最后一个日期
但是,我更喜欢一种更简单的方法:
where day(dateadd(day, 1, orderdate)) = 1
我觉得这更清楚。这似乎是一种相当神秘的方法。代码所做的是计算自某个月的最后一天起的月数。然后,它将这个月数添加到该日期。由于
dateadd()
的规则,月份仍然是最后一个日期
但是,我更喜欢一种更简单的方法:
where day(dateadd(day, 1, orderdate)) = 1
我发现这一点更清楚。@GordenLinoff,thx表示答案,似乎更容易理解:)@GordenLinoff,thx表示答案,似乎更容易理解:)当您深入了解数据库的报告方面时,您会发现数据仓库。然后你会发现这个叫做日历表的东西,这是解决这个问题的另一种方法:创建一个表,列出每一天以及该日期的每一个有用属性,包括一个月的最后一天是什么。由于您正在学习SQL Server,因此看到解决同一问题的两种完全不同(但都完全有效)的方法对您很有启发。当您深入了解数据库的报告方面时,您会发现数据仓库。然后你会发现这个叫做日历表的东西,这是解决这个问题的另一种方法:创建一个表,列出每一天以及该日期的每一个有用属性,包括一个月的最后一天是什么。因为您正在学习SQL Server,所以看到解决同一问题的两种完全不同(但都完全有效)的方法对您很有启发。