我正在 SQL Server 中創建一個函式來驗證給定的日期是圣誕節還是元旦。請告知以下代碼是否正常:
Declare @paramDate date
....
IF Month(@paramDate) = 12 and DAY(@paramDate) = 25
or Month(@paramDate) = 1 and DAY(@paramDate) = 1
BEGIN
....
以上是我能想到的最簡單的方法,無論時區和日期格式
uj5u.com熱心網友回復:
我會創建一個這樣的表值函式,而不是我懷疑的基于您問題中的語法的標量函式。您的支票很好,我認為它們不會更簡單并且仍然很直觀,但是測驗特定日期的另一種方法是比較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并簡單地加入到日期列上。
uj5u.com熱心網友回復:
您可以與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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/329768.html
標籤:sql sql-server 查询语句
上一篇:每個提供的ID獲取特定數量的記錄
下一篇:SQL資料庫If-Else陳述句
