Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算月底下的订单_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 计算月底下的订单

Sql 计算月底下的订单,sql,sql-server,tsql,Sql,Sql Server,Tsql,我目前正在使用Ben Gan,Itzik这本书学习SQL Server。T-SQL基础知识。下面是一个用于选择月末下单的查询。(我知道函数EOMONTH()也可以使用) 作者的解释是: 此表达式首先根据整体计算差异 在某个月的最后一天(1899年12月31日,在 (本案例)和指定日期。称之为差异 将不同的月份添加到锚定日期,您将获得锚定日期的最后一天 目标月 然而,我仍然有点困惑它到底是如何工作的。有人能解释一下吗 我自己尝试了这个问题,似乎已经掌握了窍门。这是我写的,以防其他人感兴趣 SELE

我目前正在使用Ben Gan,Itzik这本书学习SQL Server。T-SQL基础知识。下面是一个用于选择月末下单的查询。(我知道函数EOMONTH()也可以使用)

作者的解释是:

此表达式首先根据整体计算差异 在某个月的最后一天(1899年12月31日,在 (本案例)和指定日期。称之为差异 将不同的月份添加到锚定日期,您将获得锚定日期的最后一天 目标月


然而,我仍然有点困惑它到底是如何工作的。有人能解释一下吗

我自己尝试了这个问题,似乎已经掌握了窍门。这是我写的,以防其他人感兴趣

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,所以看到解决同一问题的两种完全不同(但都完全有效)的方法对您很有启发。