有没有办法使用以下方案在SQL中获取特定日期;
日期是20日:
1。)如果当月的日期是2017年1月23日,那么我想从2017年1月20日开始,即3天
2。)如果当月的日期是2017年1月17日,那么我想从2016年12月20日开始收到所有内容。
所以焦点是当前月份的20日或前一个月的日期。
关于如何在SQL中构建它的任何想法?
答案 0 :(得分:0)
此表达式应该找到过去一个月中最近的20个月:
select
DATEADD(month,
DATEDIFF(month,'20010101',GETDATE()),
CASE WHEN DATEPART(day,GETDATE()) < 20 THEN '20001220'
ELSE '20010120' END)
它的工作原理是计算过去和今天某个固定日期之间的整个月份。
然后我们将这个月数添加到另一个固定日期 - 一个月的20日。但我们使用CASE
来确定第二个固定日期与第一个日期相比的关系 - 它是同月还是前一个?
答案 1 :(得分:0)
你总是可以使用MONT(日期字段)来获取日期月份的数值,你可以在上个月做-1,YEAR(日期字段)的工作方式相同。
希望它有所帮助!问候
答案 2 :(得分:0)
我通常会为这种操作构建一些函数,它可以及时更改并且很容易修改。
CREATE FUNCTION GetDates(@Day int)
RETURNS @DateRange TABLE
(
StartDate DATETIME,
EndDate DATETIME
)
AS
BEGIN
DECLARE @StartDate VARCHAR(30),
@EndDate VARCHAR(30),
@CurDate DATETIME,
@CurDay INT;
SET @CurDate = GETDATE();
SET @CurDay = DAY(GETDATE());
SET @EndDate = CONVERT(VARCHAR(30), @CurDate, 112);
IF @CurDay <= @Day
BEGIN
SET @StartDate = CONVERT(VARCHAR(30), DATEADD(day, (@Day - @CurDay), DATEADD(month, -1, @CurDate)), 112);
END
ELSE
BEGIN
SET @StartDate = CONVERT(VARCHAR(30), DATEADD(day, (@Day - @CurDay), @CurDate), 112);
END
INSERT INTO @DateRange VALUES (CAST(@StartDate AS DATETIME), CAST(@EndDate AS DATETIME));
RETURN
END
GO
然后你可以将它添加到连接句子中,或者使用如下的选择句子直接调用它:
select StartDate, EndDate from GetDates(14);
可以尝试here。