sql - 如何使用 SQL 选择查询按月计算印度财政年度?
问题描述
我需要如下格式的财政年度。在印度的财政年度从每年1 April
到31 March
每年。
1. Example 1 April 2018 to 31 march 2019 (2018 - 2019).
2. Example 1 April 2019 to 31 march 2020 (2019 - 2020).
我想在输出下方并选择从 2018 年到当前日期的列下方需要查询,如果新的 4 月开始,那么新的下拉值应该再次出现,例如2020
过去一年,那么如果当前月份April 2021
,那么新的下拉值2021 - 2022
应该像这样出现。
Year FinancialYear
------------------------
2018 2018-2019
2019 2019-2020
解决方案
您可以尝试使用datefromparts()
如下所示的功能。这是DATEFROMPARTS (Transact-SQL)的官方文档。
此函数返回映射到指定年、月和日值的日期值。
句法
DATEFROMPARTS ( year, month, day )
以下是为您提供的实现。
create table FinancialYear (Year int)
insert into FinancialYear values (2018), (2019), (2020)
Select Year,
Cast(Year as Varchar(4)) + '-' + Cast(year + 1 as varchar(4)) as FinancialYear
,datefromparts(year, 4, 1) as [StartingDate]
,datefromparts(year + 1 , 3, 31) as [EndingDate]
from FinancialYear
输出如下图所示。
有一个替代方法是使用cte
你不需要的表,如下所示。
-- Define start and end limits
Declare @start int, @end int
Select @start = 2018, -- As you want
@end = year(getdate()) --Current Year
;With NumberSequence( Year ) as
(
Select @start as Year
union all
Select Year + 1
from NumberSequence
where Year < @end
)
--Select result
Select Year,
Cast(Year as Varchar(4)) + '-' + Cast(year + 1 as varchar(4)) as FinancialYear
,datefromparts(year, 4, 1) as [StartingDate]
,datefromparts(year + 1 , 3, 31) as [EndingDate]
from NumberSequence Option (MaxRecursion 1000)
这是现场演示。
编辑
如果您使用的是 SQL Server 2005,那么您的查询将如下所示。
insert into FinancialYear values (2018)
insert into FinancialYear values (2019)
insert into FinancialYear values (2020)
Select Year,
Cast(Year as Varchar(4)) + '-' + Cast(year + 1 as varchar(4)) as FinancialYear
,CAST(Convert(Varchar(4), year) + '-' + '4' + '-' + '1' as DATETime) as [StartingDate]
,CAST(Convert(Varchar(4), year + 1) + '-' + '3' + '-' + '31' as DateTime) as [EndingDate]
from FinancialYear
如果您想排除月份编号为 的财政年度Jan
,Fab
或者March
您可以编写 where 条件,如下所示。
Select Year,
Cast(Year as Varchar(4)) + '-' + Cast(year + 1 as varchar(4)) as FinancialYear
,CAST(Convert(Varchar(4), year) + '-' + '4' + '-' + '1' as DATETime) as [StartingDate]
,CAST(Convert(Varchar(4), year + 1) + '-' + '3' + '-' + '31' as DateTime) as [EndingDate]
from FinancialYear
where (
(ISNULL(month(getdate()), 0) >= 4 )
OR
(ISNULL(month(getdate()), 0) < 4 AND Year < year(getdate()))
)
推荐阅读
- groovy - 如何修复 Groovy 脚本以读取属性文件并将属性文件的所有元素返回给 Jenkins 主动选择反应参数
- flutter - 颤振:如何使动画列表滑动项溢出隐藏?
- typescript - Typescript + Svelte - 如何添加类型以传播组件道具
- python-3.x - Django 使用时区 UTC+1 对日期时间进行建模,另存为 UTC+0
- java - Hibernate java.lang.IllegalStateException:事务已经激活
- mysql - 查询中的日期比较:逻辑正确但结果错误
- rabbitmq - 多队列 RabbitMq 扇出模式如何保证消息的顺序?
- python - 使用 Python 检查 Windows 更新时出错
- microsoft-cognitive - 监视 Microsoft 翻译 API 的特定语言 API 调用
- docker - “gcloud builds submit ...”后 Flask 应用部署失败(Liveness probe failed)