检查某个日期是圣诞节还是新年的函数



我正在SQL Server中创建一个函数来验证是否给定日期是圣诞节还是新年。请告知以下代码是否可以:

Declare @paramDate date
....
IF Month(@paramDate) = 12 and DAY(@paramDate) = 25
or Month(@paramDate) = 1 and DAY(@paramDate) = 1
BEGIN
....

以上是我能想到的最简单的方法,无论时区和日期格式

我会创建这样一个表值函数,而不是我怀疑是基于您的问题中的语法的标量函数。你的检查很好,我认为它们不能再简单了,而且仍然是直观的,但另一种测试特定日期的方法是与DATEFROMPARTS():

进行比较。
CREATE FUNCTION dbo.IsSpecificHoliday
(
@d date
)
RETURNS table WITH SCHEMABINDING
AS
RETURN 
(
SELECT IsSpecificHoliday = CASE @d
WHEN DATEFROMPARTS(YEAR(@d), 12, 25) THEN 1
WHEN DATEFROMPARTS(YEAR(@d), 1,  1) THEN 1
ELSE 0 END
);

示例用法:

CREATE TABLE dbo.Dates(TheDate date);
INSERT dbo.Dates(TheDate) VALUES
('19701214'),('19991225'),('20400101');
SELECT d.TheDate, f.IsSpecificHoliday
FROM dbo.Dates AS d 
CROSS APPLY dbo.IsSpecificHoliday(d.TheDate) AS f;

结果:IsSpecificHoliday0

您可以将隐式转换与right()函数一起使用

Declare @date date = '2021-12-25'
Select case when right(@date,5) in ('12-25','01-01') then 1 else 0 end

带有显式转换

Declare @date date = '2021-12-25'
Select case when convert(varchar(5),@date,101)  in ('12/25','01/01') then 1 else 0 end

相关内容

  • 没有找到相关文章

最新更新