Финансовый год с текущей даты - PullRequest
0 голосов
/ 16 июня 2020

Я использую SSMS / SSRS2012, работая над отчетом, чтобы зафиксировать все часы, отработанные в текущем финансовом году, который для этой цели длится с 1 октября по 30 сентября. говорит следующее: если текущий месяц <10 (октябрь), то @FYStart = прошлый год, если текущий месяц> = 10, тогда @FYStart = текущий год

Когда я запрашиваю SELECT GETDATE(), вот формат: 2020-06-16 15:24:57.637

Я пробовал следующее, но работает только половина.

SELECT CASE WHEN DATEPART(MONTH,(CAST(getdate() AS INT)))>09 THEN YEAR(CAST(getdate() AS INT)) ELSE DATEADD(YEAR,-1,(CAST(getdate() AS INT))) END

Результат дает мне 2019-06-17 00:00:00.000, что является шагом в правильном направлении, но если я изменю месяц на месяц, который уже прошел,

SELECT CASE WHEN DATEPART(MONTH,(CAST(getdate() AS INT)))>03 THEN YEAR(CAST(getdate() AS INT)) ELSE DATEADD(YEAR,-1,(CAST(getdate() AS INT))) END

Я получаю такой результат: 1905-07-14 00:00:00.000

Очевидно, здесь что-то не так, но я не уверен, что именно. Я думаю, что это что-то с типами данных, но я не уверен, что проверить / с чего начать.

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Если я что-то не упускаю, разве это не что-то такое простое, как ...

SELECT CASE WHEN MONTH(getdate()) <10
        THEN YEAR(getdate()) -1
        ELSE YEAR(getdate())
        END
0 голосов
/ 16 июня 2020

Итак, из того, что я понял, вы пытаетесь изолировать год (как целое число) от сегодняшней даты и сохранить его в @FYStart. Если сегодняшняя дата раньше октября, вы хотите назначить ее прошлому году, а если это октябрь или позже, назначить ее этому году, правильно?

Если да, попробуйте следующее:

DECLARE @FYStart int
SET @FYStart = (
    SELECT CASE WHEN DATEPART(MONTH, GETDATE()) < 10
        THEN DATEPART(YEAR, DATEADD(YEAR, -1, GETDATE())) -- last year
    ELSE DATEPART(YEAR, GETDATE())  -- this year
    END
    )
...