我有一個腳本,需要從IF ELSE條件中回傳DATETIME。但是我的回傳值在這里得到了一個錯誤的值。
所以這是我的腳本
DECLARE @last_date SMALLDATETIME;
DECLARE @end_date SMALLDATETIME;
DECLARE @initial_date SMALLDATETIME;
DECLARE @begin_date SMALLDATETIME;
DECLARE @datediff int;
DECLARE @date_day int;
SET @last_date = NULL。
SET @datediff = NULL;
SET @initial_date = Null;
如果(@datediff = ''/span> or @datediff is Null)
SET @datediff = 5;
ELSE
SET @datediff = @datediff;
如果(@last_date = ''/span> or @last_date is NULL)
SET @end_date = DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1) 。
ELSE
SET @end_date = DATEADD(MONTH, DATEDIFF(MONTH, -1, @last_date)-1, -1) 。
如果(@initial_date = ''/span> or @initial_date is NULL)
SET @begin_date = DATEADD(MONTH, DATEDIFF(MONTH, 0, @end_date)-@datediff, 0) 。
ELSE
SET @begin_date = @initial_date;
SET @end_date = DATEADD(MONTH, DATEDIFF(MONTH, 0, @begin_date) @datediff, DATEPART(d,@initial_date))。
print(@begin_date)
print(@end_date)
從這個邏輯來看,它的取值應該是這樣的
但它只回傳值
- begin_date = Dec 1 2020 12:00AM
但是從這個腳本中,為什么會進入到ELSE條件@initial_date? 我的腳本有什么問題嗎?
uj5u.com熱心網友回復:
如果我對你的問題理解正確,這個意外結果的原因是最后一行(SET @end_date = DATEADD(MONTH, DATEDIFF(MONTH, 0, @begin_date) @datediff, DATEPART(d, @initial_date));)是在IF. ELSE塊之外,并且總是將@end_date的值設定為NULL。可能是一個適當的BEIGN . END塊在最后的IF...ELSE陳述句將解決這個問題:
...
IF (@initial_date = ''/span> or @initial_date is NULL)
SET @begin_date = DATEADD(MONTH, DATEDIFF(MONTH, 0, @end_date)-@datediff, 0) 。
ELSE BEGIN
SET @begin_date = @initial_date。
SET @end_date = DATEADD(MONTH, DATEDIFF(MONTH, 0, @begin_date) @datediff, DATEPART(d,@initial_date))。
結束。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/314805.html
標籤:
上一篇:選擇有條件的最大日期
