-1

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

4

4 回答 4

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...

于 2013-10-04T21:01:06.390 回答
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
于 2013-10-08T10:51:20.043 回答
0
select [column]
  from [table]
 where [datecol] between DATEADD(month, -5, getdate()) and getdate()
于 2013-10-04T20:52:14.447 回答
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;
于 2013-10-04T21:21:31.940 回答