SQL从Year和Quarter创建DateTime值

Mar*_*k A 5 sql t-sql sql-server

我知道与计划相关的里程碑的年份和季度(例如"2010"和"4"),我想从中选择/创建日期时间.有一些很好的方法可以用特定日期的格式("qq")来识别季度,但不要反过来(或者在那里?).这是使用t-sql/SQL Server.

注意:日期时间应该是该季度的最后一天.

更新:这是我最终使用gbn提供的解决方案,使用AaronLS的变量名称,然后通过Frank Kalis的建议进行缩短和加糖:-)重要的是测试所有4个季度以确保年份得到处理正常.感谢所有回答的人!

DECLARE @TheQuarter INT
DECLARE @theYear INT
-- Note: qq = q = quarter for the datepart
SET @TheQuarter = 1
SET @TheYear = 2011
SELECT DATEADD(YEAR, @TheYear-1900, DATEADD(qq, @TheQuarter, -1))
-- 2011-03-31 00:00:00.000

SET @TheQuarter = 2
SET @TheYear = 2011
SELECT DATEADD(YEAR, @TheYear-1900, DATEADD(qq, @TheQuarter, -1))
-- 2011-06-30 00:00:00.000

SET @TheQuarter = 3
SET @TheYear = 2011
SELECT DATEADD(YEAR, @TheYear-1900, DATEADD(qq, @TheQuarter, -1))
-- 2011-09-30 00:00:00.000

SET @TheQuarter = 4
SET @TheYear = 2011
SELECT DATEADD(YEAR, @TheYear-1900, DATEADD(qq, @TheQuarter, -1))
-- 2011-12-31 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

以下是从日期开始获取季度的几个问题,但不是相反: 计算当前季度的最后一天 ; 计算该季度的最后一天 ; 在SQL Server中存储季度和年份的最佳方法?

gbn*_*gbn 9

永远不要使用字符串进行日期转换:格式,语言等方面的错误太多了.

将其保留在日期时间类型中......

Select dateadd(day, -1, 
                       dateadd(year, @year-1900,
                                          dateadd(quarter, @qq, 0)
                                     )
             )
Run Code Online (Sandbox Code Playgroud)