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