2014-03-03 48 views
3

我在單獨的列中有月份和年份,我想要在兩個點(即開始日期和結束日期)之間進行記錄。我只有月和年。一個解決辦法我發現是轉換日期,月份合併爲日期.Say我有在SQL中轉換月份和年份組合

Start month : 3 Start year : 2010 
End month : 6 End year : 2013 

我想將它們轉換爲

start date = 01-03-2010 

End date = 31-06-2013 

任何解決方案?

+1

開始一個月是很容易的。因爲您需要確定指定年份/月份的最後一天是什麼,因此最後一個月將很難。 –

+0

http://stackoverflow.com/questions/266924/create-a-date-with-t-sql –

+2

無論誰設計這個表應該被解僱。 – Kermit

回答

1

由於馬克乙說,結束月將是困難的,因爲你需要弄清楚指定年份的最後一天/月是什麼。

試試這個

DECLARE @StartMonth INT = 3 
DECLARE @StartYear INT = 2010 
DECLARE @EndYear INT = 2013 
DECLARE @EndMonth INT = 6 

SELECT Dateadd(year, @StartYear - 2000,Dateadd(month, @StartMonth - 1, '20000101')) AS StartDate, 
     Dateadd(year, @EndYear - 2000, Dateadd(month, @EndMonth - 1, '20000101')) AS EndDate 
1

這裏有一個方法:

select convert(date, cast(startyear*10000 + startmon*100 + 1 as varchar(8)), 112) 
. . . 
0

如果日期部分存儲爲整數,你可以這樣做只是想將它們轉換爲varchar,串聯,再投。例如:

DECLARE @StartYear INT = 2012 
DECLARE @StartMOnth INT = 6 

SELECT CAST(CAST(@StartYear AS CHAR(4)) + '-' + CAST(@StartMonth AS VARCHAR(2)) + '-01' AS DATE) 

在結束日期,您可以使用一個CASE語句來確定該月的最後一天。不要忘了閏年。

3

以下是經過年月

DECLARE @month varchar(2) 
DECLARE @year varchar(4) 

月的第一次約會

set @month='03' 
set @year='2010' 
select cast(@year + '-' + @month + '-01' as date) 

輸出找到每月最後一個和第一次約會的方式

2010-03-01 

上個月的日期(增加你的月1然後減去1天)

set @month='06' 
set @year='2013' 
select CAST(cast(@year + '-' + Cast(cast(@month as int)+1 as varchar(20)) + '-01' as datetime)-1 as DATE) 

輸出

2013-06-30