计算日期值前5个月

时间:2013-10-04 20:48:52

标签: sql-server tsql

我有一个输出日期的查询,我想添加一个额外的列,代表该日期前5个月的日期。因此,如果输出值是2012-06,那么我想显示2012-01。

4 个答案:

答案 0 :(得分:1)

SELECT 
  unnamed_date_column, 
  5_months_earlier = DATEADD(MONTH, -5, unnamed_date_column)
FROM dbo.unnamed_table;

如果你将这些存储为varchar(如果它们在yyyy-mm中你必须存在,你应该停止这样做),那么你可以这样做:

SELECT
  unnamed_date_column, 
  5_months_earlier = DATEADD(MONTH, -5, unnamed_date_column)
FROM 
(
  SELECT unnamed_date_column = CONVERT(DATETIME, unnamed_varchar_column + '-01')
  FROM dbo.unnamed_table
) AS x;

当然,这可能会产生错误,因为如果您为此列选择了错误的数据类型,则任何人都可以在此列中输入2013-131623-99who_dat

答案 1 :(得分:0)

select [column]
  from [table]
 where [datecol] between DATEADD(month, -5, getdate()) and getdate()

答案 2 :(得分:0)

计算上个月的第一个月(@Start)和结束日期(@End)的开始日期后:

DECLARE @CurrentDate SMALLDATETIME; -- Or DATE[TIME][2][OFFSET]
SET @CurrentDate = GETDATE(); -- 2013-10-05

DECLARE @Start SMALLDATETIME, @End SMALLDATETIME;

SET @Start  = DATEADD(MONTH, (DATEDIFF(MONTH, 0, @CurrentDate) - 4), 0);
SET @End    = DATEADD(MONTH, (DATEDIFF(MONTH, 0, @CurrentDate) + 1), 0);

SELECT  @Start AS [@Start], @End AS [@End];
/*
@Start     @End
---------- ----------
2013-06-01 2013-11-01
*/

您可以使用以下谓词过滤行:

SELECT ...
FROM ...
WHERE SomeDateColumn >= @Start AND SomeDateColumn < @EndDate;

答案 3 :(得分:0)

试试这个:

DECLARE @DT DATETIME = GETUTCDATE()
SELECT CONVERT(VARCHAR(7),@DT, 120) AS TODAY_DATE, CONVERT(VARCHAR(7),DATEADD(MM,-5,@DT), 120 ) AS BEFORE_5_MONTHS