gpt4 book ai didi

sql-server - 计算SQL中两个日期之间出现了多少个月 'January'

转载 作者:行者123 更新时间:2023-12-03 02:38:03 25 4
gpt4 key购买 nike

我需要获取 TSQL 中两个日期之间发生了多少个一月。

即如果包含特定年份 1 月份的任何一天,则每年算 1 次,而不是每月多次。

作为示例,以下结果将给出 = 1

declare @date1 datetime = '2018-09-01 00:00:00.000';
declare @date2 datetime = '2019-02-01 00:00:00.000';

作为示例,下面的结果将给出 = 1,因为 1 月已经过去了 1 天

declare @date1 datetime = '2018-09-01 00:00:00.000';
declare @date2 datetime = '2019-01-01 00:00:00.000';

作为示例,以下命令将给出结果 = 0,因为 1 月没有天

declare @date1 datetime = '2018-09-01 00:00:00.000';
declare @date2 datetime = '2018-11-01 00:00:00.000';

作为示例,以下给出的结果 = 2,因为 1 月出现了两次

declare @date1 datetime = '2017-09-01 00:00:00.000';
declare @date2 datetime = '2019-11-01 00:00:00.000';

最佳答案

尝试使用DATEDIFF()DATEPART() .

您可以测试开始日期和结束日期是否在一月日期之外,然后添加 -1...

DECLARE @startdate AS DATETIME = '2015-02-01'
DECLARE @enddate AS DATETIME = '2019-06-01'

SELECT
DATEDIFF(yy, @startdate, @enddate)
+ 1
+ CASE
WHEN DATEPART(m, @startdate) > 1 AND
DATEPART(m, @enddate) > 1
THEN -1
ELSE 0
END

但是,我不确定这对于大型数据集来说有多快。如果您要将大量数据与特定日期/时间集进行比较,那么我建议测试 Squirrel's answer .

要修改不同月份的值,只需更改 CASE 子句,如下所示...

+ CASE 
WHEN DATEPART(m, @startdate) < 2 AND DATEPART(m, @startdate) > 2 AND
DATEPART(m, @enddate) < 2 AND DATEPART(m, @enddate) > 2

CASE 语句中的 2 是月份,因此只需将其更改为适当的月份数字即可。

如果您想针对任何月份更改此设置,请包含您要查找的月份编号的参数...

+ CASE 
WHEN DATEPART(m, @startdate) < @month_number AND
DATEPART(m, @startdate) > @month_number AND
DATEPART(m, @enddate) < @month_number AND
DATEPART(m, @enddate) > @month_number

这也可以变成 function (UDF) .

关于sql-server - 计算SQL中两个日期之间出现了多少个月 'January',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58376788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com