首页 > 解决方案 > 检查日期是圣诞节还是元旦的功能

问题描述

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

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

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

标签: sqlsql-servertsql

解决方案


我会创建一个像这样的表值函数,而不是我怀疑是基于您问题中的语法的标量函数。你的检查很好,我认为它们不能更简单而且仍然很直观,但另一种测试特定日期的方法是比较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;

结果:

日期 是特定假日
1970-12-14 0
1999-12-25 1
2040-01-01 1

您还可以始终考虑一个日历表(用于此目的和许多其他目的),并在那里有一个计算或预填充的列,就像IsSpecificHoliday在日期列上简单地加入该列一样。


推荐阅读