Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 - Fatal编程技术网

Sql 检索除今天日期外的同一年所有前几个月的数据

Sql 检索除今天日期外的同一年所有前几个月的数据,sql,sql-server,Sql,Sql Server,需要帮助编写查询,以获取同一年所有前几个月的数据 如果今天的日期是2017年7月20日,我需要检索除今天2017年7月20日之外的同一年所有前几个月的数据 如果日期为2017年7月20日,数据应包括2017年1月17日至7月19日,以此类推 如果日期为2017年7月21日,数据应包括2017年1月17日至7月20日 谢谢 不看代码是很困难的,但是where子句中有类似的内容 WITH DATES AS ( SELECT GETDATE() AS MYDATE UNION SELECT CONVE

需要帮助编写查询,以获取同一年所有前几个月的数据

如果今天的日期是2017年7月20日,我需要检索除今天2017年7月20日之外的同一年所有前几个月的数据

如果日期为2017年7月20日,数据应包括2017年1月17日至7月19日,以此类推

如果日期为2017年7月21日,数据应包括2017年1月17日至7月20日

谢谢


不看代码是很困难的,但是where子句中有类似的内容

WITH DATES AS (
SELECT GETDATE() AS MYDATE
UNION
SELECT CONVERT(DATETIME,'01/01/1999 12:00:00.000')
UNION
SELECT CONVERT(DATETIME,'01/02/2016 12:00:00.000')
UNION
SELECT CONVERT(DATETIME,'01/04/2007 12:00:00.000')
UNION
SELECT CONVERT(DATETIME,'01/05/2005 12:00:00.000')
UNION
SELECT CONVERT(DATETIME,'01/05/2017 12:00:00.000')
UNION
SELECT CONVERT(DATETIME,'01/01/2017 14:00:00.000')
)
SELECT * FROM DATES
WHERE 
CONVERT(DATE,DATES.MYDATE) < CONVERT(DATE,GETDATE())
AND 
DATEPART(YEAR,DATES.MYDATE) = DATEPART(YEAR,GETDATE())

不看代码是很困难的,但是where子句中有类似的内容

WITH DATES AS (
SELECT GETDATE() AS MYDATE
UNION
SELECT CONVERT(DATETIME,'01/01/1999 12:00:00.000')
UNION
SELECT CONVERT(DATETIME,'01/02/2016 12:00:00.000')
UNION
SELECT CONVERT(DATETIME,'01/04/2007 12:00:00.000')
UNION
SELECT CONVERT(DATETIME,'01/05/2005 12:00:00.000')
UNION
SELECT CONVERT(DATETIME,'01/05/2017 12:00:00.000')
UNION
SELECT CONVERT(DATETIME,'01/01/2017 14:00:00.000')
)
SELECT * FROM DATES
WHERE 
CONVERT(DATE,DATES.MYDATE) < CONVERT(DATE,GETDATE())
AND 
DATEPART(YEAR,DATES.MYDATE) = DATEPART(YEAR,GETDATE())

这只是一个问题,如何得到今年的1月1日,如何得到昨天。做这件事有多种方法。下面是其中一种方法,其他不同想法的答案也可以

SELECT * FROM YourTable
WHERE YourDateCol >= DATEFROMPARTS(YEAR(GETDATE()),1,1)
AND YourDateCol < CAST(GETDATE() AS DATE) 

对于昨天来说,你实际上是在0:00就开始今天,然后在那之前得到一切。

这只是一个如何得到今年1月1日的问题,以及如何得到昨天的问题。做这件事有多种方法。下面是其中一种方法,其他不同想法的答案也可以

SELECT * FROM YourTable
WHERE YourDateCol >= DATEFROMPARTS(YEAR(GETDATE()),1,1)
AND YourDateCol < CAST(GETDATE() AS DATE) 

对于昨天,你实际上是在0:00获取今天,并在那之前获取所有信息。

要以有效的方式进行此操作,请放置两个变量,其中包含一年中的第一天和今天的日期

DECLARE @firstDayOfYear as DateTime;
DECLARE @today as DateTime;

SET @firstDayOfYear = DATEFROMPARTS(YEAR(GETDATE()),1,1);
SET @today = CAST(GETDATE() AS DATE);

SELECT * FROM [table]
WHERE [dateColumnToCompare] >= @firstDayOfYear
AND [dateColumnToCompare] < @today;

为了有效地执行此操作,请放置两个变量,其中包含一年中的第一天和今天的日期

DECLARE @firstDayOfYear as DateTime;
DECLARE @today as DateTime;

SET @firstDayOfYear = DATEFROMPARTS(YEAR(GETDATE()),1,1);
SET @today = CAST(GETDATE() AS DATE);

SELECT * FROM [table]
WHERE [dateColumnToCompare] >= @firstDayOfYear
AND [dateColumnToCompare] < @today;

我们很乐意提供帮助,但首先你需要向我们展示你已经尝试过的东西。所以不是一个代码编写服务。我尝试了这个方法来获取当前日期的00:00:00小时,您只需转换为DATE数据类型即可删除时间,并在必要时转换回DATETIME CastGetDate AS DATE AS DATETIME。除此之外,您需要为我们提供帮助。选择DATEPARTm、DATEADDm、0、getdate、DATEPARTyyyy、DATEADDm、-1、getdate。。但是,这只是检索当前月份的数据,而且不排除当前日期。我们很乐意提供帮助,但首先,您需要向我们展示您已经尝试过的内容。所以不是一个代码编写服务。我尝试了这个方法来获取当前日期的00:00:00小时,您只需转换为DATE数据类型即可删除时间,并在必要时转换回DATETIME CastGetDate AS DATE AS DATETIME。除此之外,您需要为我们提供帮助。选择DATEPARTm、DATEADDm、0、getdate、DATEPARTyyyy、DATEADDm、-1、getdate。。但此检索数据仅限于当月,且不排除当前日期。它不检索2017年7月19日的数据。它提供的数据将持续到7月18日2017@SwatiJain检查演示,我的查询应该对您有用。@TimBiegeleisen OP的列可能是datetime,并且有您的查询将在最后一天消除的时间部分。您可以在右侧再添加一天,并用>=和@NenadZivkovic替换,我想我明白了…谢谢您的编辑。它不会检索2017年7月19日的数据。它提供的数据将持续到7月18日2017@SwatiJain检查演示,我的查询应该对您有用。@TimBiegeleisen OP的列可能是datetime,并且有您的查询将在最后一天消除的时间部分。你可以在右边多加一天,然后用>=和@NenadZivkovic替换,我想我明白了…谢谢你的编辑。