2016-11-11 97 views
0

如何爲一個月的1到10個日期添加第一個並將月份的20到30天添加到最後。如何獲取每個月的第一個和最後一個月

DECLARE @Today DATE = '2016-11-05' 

Select CONVERT(VARCHAR(5),datepart (DW, @Today)-1)+' DAYS of '+ LEFT(DATENAME(month,@Today),3) Comments 

我得到我喜歡這個

Comments 
6 DAYS of Nov 

如何獲得這樣的:

Comments 
First 6 DAYS of Nov 

如果我給日期 '2016年11月24日'

需要像這樣的輸出

 Comments 
    Last 4 DAYS of Nov 

建議我繼續

回答

4

使用case聲明的方式:

Select (CASE WHEN day(@today) <= 10 THEN 'First ' 
      WHEN day(@today) >= 20 THEN 'Last ' 
      ELSE '' 
     END) + CONVERT(VARCHAR(5), datepart(DW, @Today)-1) + ' DAYS of ' + 
     LEFT(DATENAME(month, @Today), 3) as Comments 

編輯:

哦,現在我看到原來的查詢是不正確的。所以,你要更多的東西是這樣的:

Select (CASE WHEN day(@today) <= 10 THEN 'First ' + DATENAME(day, @today) + ' DAYS of ' + LEFT(DATENAME(month, @Today), 3) 
      WHEN day(@today) >= 20 AND MONTH(@Today) IN (1, 3, 5, 7, 8, 10, 12) THEN 'Last ' + CAST(31 - day(@today) as varchar(255)) 
      WHEN day(@today) >= 20 AND MONTH(@Today) IN (4, 6, 9, 11) THEN 'Last ' + CAST(30 - day(@today) as varchar(255)) 
      WHEN day(@today) >= 20 AND MONTH(@Today) IN (2) AND YEAR(@Today) % 4 = 0 THEN 'Last ' + CAST(29 - day(@today) as varchar(255)) 
      WHEN day(@today) >= 20 AND MONTH(@Today) IN (2) AND YEAR(@Today) % 4 <> 0 THEN 'Last ' + CAST(29 - day(@today) as varchar(255)) 
      ELSE CAST(day(@today) as varchar(255)) 
     END) + ' DAYS of ' + LEFT(DATENAME(month, @Today), 3) as Comments 
+0

如果我給2016年11月24日就應該給予持續4天的十一月,但它給十一月 – mohan111

+0

的第4天的時候,我給今天的日期,或11至20日期它給錯誤的結果一樣,如果我給予12/11/2016它給了11月的126天 – mohan111

0
DECLARE @Today DATE = '2016-11-09' 

Select (CASE WHEN day(@today) <= 10 THEN 'First ' + DATENAME(day, @today) 
      WHEN day(@today) >= 20 THEN 'Last ' + CAST(DAY(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@Today)+1,0))) - day(@today) as varchar(255)) 
      ELSE CAST(day(@today) as varchar(255)) 
     END) + ' DAYS of ' + LEFT(DATENAME(month, @Today), 3) 
0

隨着SQL Server 2012名的開發人員現在可以計算其中一個給定的日期是在本月的最後一天使用新的SQL日期函數EOMONTH()

這裏是我的查詢

--DECLARE @Today DATE = '2016-11-05' 
DECLARE @Today DATE = '2016-11-24' 

SELECT 
case when DATEPART(dd,@Today) <= 10 then 
'First ' + convert(varchar(2), DATEPART(dd,@Today)) + ' of ' + DATENAME(mm,@Today) 
else 
'Last ' + convert(varchar(2), DATEDIFF(dd, @Today, EOMONTH (@Today))) + ' of ' + DATENAME(mm,@Today) 
end 

SQL EOMonth() function可以更容易地計算出每月的最後一天,也間接地計算下一個月或前月的第一天第n

0
SELECT case when DATEPART(dd,@Today) <= 10 then 
'First ' + convert(varchar(2), DATEPART(dd,@Today)) + ' DAYS of ' + DATENAME(mm,@Today) 
WHEN DATEPART(dd,@Today) >= 20 then 'Last ' + convert(varchar(2), 
DATEDIFF(dd, @Today, EOMONTH (@Today))) + ' DAYS of ' + DATENAME(mm,@Today) 
ELSE @Today END 
相關問題