返回财政年度的第一天(4 月 1 日)T-SQL
Posted
技术标签:
【中文标题】返回财政年度的第一天(4 月 1 日)T-SQL【英文标题】:Return First day of Financial Year(April 1st) T-SQL 【发布时间】:2018-06-21 06:13:31 【问题描述】:财政年度的第一天是 4 月 1 日。
返回 4 月 1 日 getdate()
的 T-SQL 查询
财政年度:4月1日至3月31日
【问题讨论】:
你到底在找什么? 您可以定义一个 UDF,您可以在其中返回当年的 4 月 1 日。无论如何,财政年度的第一天永远不会改变。 创建一个日历表,它将解决多于1个日期/时间的问题。 【参考方案1】:试试这个:
select DATEFROMPARTS(Yr, 4, 1) [start], DATEFROMPARTS(Yr + 1, 3, 31) [end] from
(select case when DATEPART(month, getdate()) < 4 then DATEPART(year, getdate()) - 1 else DATEPART(year, getdate()) end Yr) a
【讨论】:
【参考方案2】:declare @today date = '2018-06-21'
select fin_year = dateadd(month, 3,
dateadd(year,
datepart(year,
dateadd(month, -3, @today)) - 1900, 0))
表达式datepart(year, dateadd(month, -3, @today))
是获取当前财政年度。由于您的财政年度是 4 月 1 日,因此从 1 月 1 日到 3 月 31 日,从中减去 3 个月,将为您提供正确的年份(财政年度 = 财政年度)。
之后就是用那一年形成日期Apr 1
【讨论】:
FY 的最后一天可能是 LastDayOfYearFY] = eomonth(dateadd(month, 5, dateadd(year, datepart(year, (dateadd(month, 6, [date])) ) -1900, 0))) 感谢您的帮助【参考方案3】:DECLARE @DateToUse DATETIME = GETDATE(),
@FinancialYearStart DATETIME
DECLARE @DayPart INT = DATEPART(DAY, @DateToUse),
@MonthPart INT = DATEPART(MONTH, @DateToUse),
@YearPart INT = DATEPART(YEAR, @DateToUse),
@StartMonth INT = 4, -- April
@StartDay INT = 1 -- 1st
SELECT DATETIMEFROMPARTS((
@YearPart - CASE
WHEN @MonthPart > @StartMonth
OR (
@MonthPart = @StartMonth
AND @DayPart >= @StartDay
)
THEN 0
ELSE 1
END
), @StartMonth, @StartDay, 0, 0, 0, 0)
我刚刚敲了这个,它产生了2020-04-01 00:00:00.000
现在。我扔了一些其他的日期,它似乎工作得很好。显然,可以通过更改顶部的变量轻松更改月/日。
它不是最短的 SQL 块,但它很容易用于不同的日期。我在不同问题中看到的许多其他答案都返回了不同的格式,例如字符串或只是年份部分。而这个日期时间将允许它用于日期时间比较。
【讨论】:
以上是关于返回财政年度的第一天(4 月 1 日)T-SQL的主要内容,如果未能解决你的问题,请参考以下文章