2014-09-26 105 views
1

喜月的最後一天,我有一個月的時間數和年如:月2和2014年如何獲得的第一天,從給定的年份和月份在SQL

我怎樣才能得到的第一天月如2014-02-01和2014-02-28月的最後一天?

我看到的越來越基於給定日期月的第一個和最後一天很多帖子,但我需要它基於給定年份和月份提前

+0

你需要SQL標準,mysql方言或mssql方言的答案嗎?閱讀您的帖子的標籤,它不明確。 – Paolo 2014-09-26 14:15:18

+0

第一次約會是否有一個月不是「1」?!?! – Strawberry 2014-09-26 14:38:52

+0

Problaly這就是爲什麼MySql沒有函數first_day – Gervs 2014-09-26 15:12:01

回答

0

在MySQL

感謝:

SELECT DATE_SUB(LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)), 
        INTERVAL DAY(LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)))-1 DAY) AS firstOfNextMonth, 
      LAST_DAY(DATE_ADD(NOW(), 
        INTERVAL 1 MONTH)) AS lastOfNextMonth 
在SQL Server

select convert(varchar,dateadd(d,-(day(getdate()-1)),getdate()),106) 'Date' 
union all 
select convert(varchar,dateadd(d,-day(getdate()),dateadd(m,1,getdate())),106) 
0

不是一個問題的任擇議定書,但可能會有所幫助別人

postgres中的解決方案:

SELECT to_date((2012 || '-' || 9)::text, 'YYYY-MM') AS first_day, 
     (to_date((2012 || '-' || 9)::text, 'YYYY-MM') + interval '1 month' - interval '1 day')::date AS last_day 
2

在SQL Server 2012及更高版本

DECLARE @year int = 2014 
DECLARE @month int = 12 

SELECT 
DATEFROMPARTS (@year, @month, 1) AS MonthStart, 
EOMONTH (DATEFROMPARTS (@year, @month, 1)) AS MonthEnd 

結果

MonthStart MonthEnd 
---------- ---------- 
2014-12-01 2014-12-31 

(1 row(s) affected) 

更多細節 DATEFROMPARTS:http://msdn.microsoft.com/en-gb/library/hh213228.aspx EOMONTH:http://msdn.microsoft.com/en-us/library/hh213020.aspx

+0

哇!下週我會升級到SQL Server 2012! :) – tezzo 2014-09-26 15:36:56

0

在MS SQL Server 2008中,下面好像工作:

DECLARE @Month INT = 10; 
DECLARE @Year INT = 2016; 
DECLARE @FirstDayOfMonth DATETIME = CAST(@Year AS varchar) + '-' + CAST(@Month AS VARCHAR) + '-1'; 
DECLARE @LastDayOfMonth DATETIME = DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @FirstDayOfMonth) + 1, 0)); 

SELECT @FirstDayOfMonth, @LastDayOfMonth; -- 2016-10-01, 2016-10-31 
相關問題