【发布时间】:2021-08-31 00:04:58
【问题描述】:
我有一个脚本需要从 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)
从这个逻辑来看,应该是这样的值
- begin_date = 2020 年 12 月 1 日上午 12:00
- end_date = 2021 年 5 月 31 日上午 12:00
但它只返回值
- begin_date = 2020 年 12 月 1 日上午 12:00
但是从那个脚本为什么它进入 ELSE 条件 @initial_date ?我的脚本有什么问题吗?
【问题讨论】:
-
您正在设置 SET initial_date = NULL; 所以您的 initial_date 始终为空,因此您始终执行 if/else 的 if 部分。你永远不会进入 ELSE 部分
-
@nacho 嗯,抱歉,为什么我的
@end_date没有打印出来?我已经在我的@last_dateif/else 条件下设置了它? -
此脚本引用了一些问题:
''不是有效日期,也不是数字,要么分别使用1970-01-01和0,要么将其删除。DATEADD看起来参数倒退了。最后一个ELSE需要BEGIN/END。看起来你还没有听说过EOMONTH()和DATEFROMPARTS函数
标签: sql-server tsql sql-server-2008 if-statement