我知道与时间表相关的里程碑的年份和季度(例如“2010”和“4”),我想从中选择/创建日期时间。有许多种巧妙的方法可以识别带有特定日期格式(“qq”)的四分之一,而不是相反(或在那里?)。这是与t-sql/SQL Server一起使用的。

注意:日期时间应为该季度的最后日。

更新:这是我最终使用gbn的解决方案,使用AaronLS的变量名,然后根据Frank Kalis的建议进行了简化:-)对所有四个季度进行测试以确保年份是很重要的处理得当。感谢所有回答!

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

以下是一些从日期获取季度的q,但并非相反:
Calculate the Last Day in the CURRENT quarter; Calculate the last day of the quarter; Best way to store quarter and year in SQL Server?

最佳答案

切勿将字符串用于日期时间转换:格式,语言等太多错误。

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

Select dateadd(day, -1,
                       dateadd(year, @year-1900,
                                          dateadd(quarter, @qq, 0)
                                     )
             )

关于SQL从年份和季度创建DateTime值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6037755/

10-13 03:05