我在单独的列中有月份和年份,我想记录两点之间的记录(即开始日期和结束日期)。我一个月都有。我发现的一个解决方案是将日期,月份组合转换为日期。我有
Start month : 3 Start year : 2010
End month : 6 End year : 2013
我想将它们转换为
start date = 01-03-2010
End date = 31-06-2013
任何解决方案?
答案 0 :(得分: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
答案 1 :(得分:1)
这是一种方法:
select convert(date, cast(startyear*10000 + startmon*100 + 1 as varchar(8)), 112)
. . .
答案 2 :(得分:1)
正如 Marc B 所说,结束月份会很难,因为你需要弄清楚指定年/月的最后一天是什么。
试试这个
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
答案 3 :(得分:0)
如果将dateparts存储为int,你可以做一些简单的事情,比如将它们转换为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语句来标识该月的最后一天。不要忘记闰年。
答案 4 :(得分:0)
SqlServer 2012及更高版本支持 DATEFROMPARTS ()。可以这样:
DECLARE @Month as int, @Year as int
SET @Month = 8
SET @Year = 2018
SELECT DATEFROMPARTS(@Year,@Month,'01')
要获取月份的最后日期,可以使用 EOMONTH ()如下:
SELECT EOMONTH(DATEFROMPARTS(@Year,@Month,'01'))
答案 5 :(得分:0)
您可以使用sql函数
Select cast(('01-'+h.[monthyear]) as date) from table1 h