sql - 检查日期是圣诞节还是元旦的功能
问题描述
我正在 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;
结果:
日期 | 是特定假日 |
---|---|
1970-12-14 | 0 |
1999-12-25 | 1 |
2040-01-01 | 1 |
您还可以始终考虑一个日历表(用于此目的和许多其他目的),并在那里有一个计算或预填充的列,就像IsSpecificHoliday
在日期列上简单地加入该列一样。
推荐阅读
- python - dart 中是否有与 python 中的 int(a,b) 等效的函数?
- jmx - 如何对作业/流执行设置 Azkaban 时间序列监控
- pandas - 如何将扩展窗口应用于 groupby 结果的名称?
- c - 如何输出垂直直方图?
- java - 在 Spring Boot 应用程序中持续收听新电子邮件
- kotlin - 在 Ktor 服务器中检测客户端断开连接的任何方法
- python - 如何使用硒识别按钮状态(正常/加载)?
- python - 打包 Python 项目时出现 ModuleNotFoundError
- azure-devops-migration-tools - 如何使用迁移工具迁移 Git 存储库 (https://marketplace.visualstudio.com/items?itemName=nkdagility.vsts-sync-migration)
- tailwind-css - 无 Jank 的 Tailwind / Alpine.js 手风琴