我有一個腳本需要從 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;
IF (@datediff = '' or @datediff is NULL)
SET @datediff = 5;
ELSE
SET @datediff = @datediff;
IF (@last_date = '' 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);
IF (@initial_date = '' 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)
從這個邏輯來看,它應該采用這樣的值
- 開始日期 = 2020 年 12 月 1 日上午 12:00
- end_date = 2021 年 5 月 31 日上午 12:00
但它只回傳值
- 開始日期 = 2020 年 12 月 1 日上午 12:00
但是從那個腳本為什么它進入 ELSE 條件@initial_date?我的腳本有什么問題嗎?
uj5u.com熱心網友回復:
如果我正確理解了您的問題,則出現此意外結果的原因是最后一行 ( SET @end_date = DATEADD(MONTH, DATEDIFF(MONTH, 0, @begin_date) @datediff, DATEPART(d, @initial_date));) 在IF.. ELSE塊之外并且始終將值設定為@end_dateto NULL。最后一條陳述句中的適當BEIGN .. END塊可能會解決此問題:IF..ELSE
...
IF (@initial_date = '' 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));
END
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/422595.html
標籤:
