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。请注意,这需要在内部在脚本中计算。如果我做错了什么,我该如何纠正它以获得所需的结果?
使用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)