SQL Server 2012 中的年份计算

Posted

技术标签:

【中文标题】SQL Server 2012 中的年份计算【英文标题】:Year Calculation in SQL Server 2012 【发布时间】:2016-01-05 05:32:38 【问题描述】:
StartDate = 01/01/2013 
EndDate = 12/31/2019

我需要得到像'2013-14' , '2014-15' , 2015-16 这样的年份列。

例如,2013-14 年应包含从 2013 年 6 月到 2014 年 5 月的日期详细信息。同样,我需要获取截至结束日期的年份。请帮帮我。

concat(datepart(YY,StartDate),'-', RIGHT(YEAR(StartDate),2) + 1)

我使用了上述格式。我可以得到 2013-14 的输出。但我需要指定分割年份的月份范围。

问候, 万马提

【问题讨论】:

【参考方案1】:

使用FORMAT函数:

SELECT
    FORMAT(StartDate, 'yyyy-MM'),
    FORMAT(EndDate, 'yyyy-MM')

在official MSDN documentation page 上阅读有关FORMAT 函数的所有信息。

【讨论】:

【参考方案2】:

使用用户定义的函数来分割日期,然后进行文本连接。

CREATE FUNCTION GetSlicedYear(@TheDate date)
RETURNS varchar(7)
AS
BEGIN
    DECLARE @SlicedYear varchar(7)  
    IF DATEPART(month, @TheDate) < 6
        SELECT @SlicedYear = (DATEPART(year, @TheDate) -1 ) +"-"+ RIGHT(CAST(YEAR(@TheDate) As varchar(4)),2)
    ELSE
        SELECT @SlicedYear = DATEPART(year, @TheDate) +"-"+ RIGHT(CAST((YEAR(@TheDate) +1) As varchar(4)),2)
    RETURN @SlicedYear
END

然后像这样订购(或组)。

 SELECT SomeField, GetSlicedYear(SomeDate) FROM SomeTable ORDER BY GetSlicedYear(SomeDate)

【讨论】:

【参考方案3】:

您可以使用下面的选择语句 -

select FORMAT(StartDate , 'yyyy') + '-' + FORMAT(EndDate , 'yyyy') 

【讨论】:

以上是关于SQL Server 2012 中的年份计算的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 中的动态数据透视表

SQL Server 2008 仅在月份和年份之间选择数据

sql server 中两个日期之间的年份以及每个日期在 sql server 中的开始和结束日期

从 SQL Server 中的日期检索年份和周数

sqlserver截取日期的年份和月份

在 SQL Server 中获取特定年份中的列作为月份名称