根据输入的年份 SQL Server 和 SSRS 计算财政年度的开始和结束日期

Ask*_*kMe 5 sql-server sql-server-2005 sql-server-2008 ssrs-2008

我有报告,它YEAR作为一个参数,我想计算财政年度的开始和结束。这是我正在尝试的方式:

CREATE PROCEDURE [dbo].[sp_name] 
     @StartDate as datetime,
     @Enddate as datetime,
     @year as varchar(10)
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON; 

    @StartDate = year(dateadd(q, -1, cast(cast(@year AS char) + '/01/' + cast(@year AS char) AS datetime))) = @year
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

我需要财务开始日期为 1-July-2014 到 30-June-2015,如果年份输入为 2015。请注意,这需要在内部在脚本中计算。如果我做错了什么,我该如何纠正它以获得所需的结果?

Fel*_*tan 8

使用DATEADD并且DATEDIFF您可以在您的财政年度使用计算机:

DECLARE @year INT = 2015

SELECT
    start_date = DATEADD(MONTH, 6, DATEADD(YEAR, DATEDIFF(YEAR, 0, DATEADD(YEAR, @year - 1900, 0)) - 1, 0)),
    end_date = DATEADD(DAY, -1, DATEADD(MONTH, 6, DATEADD(YEAR, DATEDIFF(YEAR, 0, DATEADD(YEAR, @year - 1900, 0)), 0)))
Run Code Online (Sandbox Code Playgroud)

阅读此处了解更常见的约会例程。


要在存储过程中使用它:

CREATE PROCEDURE procedure_name
    @year AS INT
AS
BEGIN
SET NOCOUNT ON

SELECT
    start_date = DATEADD(MONTH, 6, DATEADD(YEAR, DATEDIFF(YEAR, 0, DATEADD(YEAR, @year - 1900, 0)) - 1, 0)),
    end_date = DATEADD(DAY, -1, DATEADD(MONTH, 6, DATEADD(YEAR, DATEDIFF(YEAR, 0, DATEADD(YEAR, @year - 1900, 0)), 0)))

END
Run Code Online (Sandbox Code Playgroud)