在T-SQL中动态设置YTD

时间:2018-01-03 12:21:26

标签: sql sql-server sql-server-2008 tsql

我想检查传递给查询的开始日期是否是今年,如果是,请设置结束日期以查看今年的年初至今。否则,如果开始日期是去年,则设置结束日期以查看去年的年初至今。

2 个答案:

答案 0 :(得分:1)

下面的脚本将根据@StartDate为您提供YTD。

DECLARE @StartDate date='01-Jan-2018'
DECLARE @YTD DATE 
DECLARE @CurrentDate DATE=GETDATE()
select DATEDIFF(YEAR,@StartDate,@CurrentDate)
IF DATEDIFF(YEAR,@StartDate,@CurrentDate)>=1
BEGIN
    SET @YTD = '31-DEC-'+ CAST(YEAR(@StartDate) AS VARCHAR(4))
END 
ELSE IF DATEDIFF(YEAR,@StartDate,@CurrentDate)=0
BEGIN 
    SET @YTD = GETDATE()--OR you can set this to 31st Dec like above
END

答案 1 :(得分:0)

@DateStart传递给查询。 您可以使用CASE语句创建@DateEnd:

-- Declare variables
DECLARE
    @DateStart DATETIME = '2018-08-17' -- passed to the query
    , @DateEnd DATETIME;

-- Populate variable @DateEnd
SELECT @DateEnd =
    CASE
        WHEN YEAR(@DateStart) = YEAR(GETDATE()) THEN CAST(GETDATE() AS DATE)
        ELSE CONVERT(DATETIME, CONCAT(CONVERT(CHAR(4), @DateStart, 120), '-12-31'))
    END;

-- Show variable @DateEnd
SELECT @DateEnd;

要包含“今天”,您可以添加1天并使用小于(<):

进行过滤
-- Populate variable @DateEnd
SELECT @DateEnd =
    CASE
        WHEN YEAR(@DateStart) = YEAR(GETDATE()) THEN DATEADD(DD, 1, CAST(GETDATE() AS DATE))
        ELSE DATEADD(DD, 1, CONVERT(DATETIME, CONCAT(CONVERT(CHAR(4), @DateStart, 120), '-12-31')))
    END;

-- Show variable @DateEnd
SELECT @DateEnd;

-- Use variable @DateEnd
SELECT
  ColumnName1
  , ColumnName2
  , ColumnName3
FROM TableName
WHERE DateTimeColumn < @DateEnd;