我有一个输出日期的查询,我想添加一个额外的列,代表该日期前5个月的日期。因此,如果输出值是2012-06,那么我想显示2012-01。
答案 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-13
或1623-99
或who_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