sql-server - IF ELSE 在 SQL Server 中返回错误值
问题描述
我有一个脚本需要从 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
?我的脚本有什么问题吗?
解决方案
如果我正确理解了您的问题,则出现此意外结果的原因是最后一行 ( SET @end_date = DATEADD(MONTH, DATEDIFF(MONTH, 0, @begin_date) + @datediff, DATEPART(d, @initial_date));
) 在IF.. ELSE
块之外并且始终将值设置为@end_date
to 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
推荐阅读
- php - MySQL PHP 在医生可用性范围内查找时间段
- bash - Bash 获取使用 head 命令提取的文件列表的大小
- python - 在python中使用线程(多处理)时传递变量
- angular - 如何在http get中传递查询参数
- java - snapshot.getvalue(double.class) 的拆箱可能会产生空指针异常
- css - 如何使图像高度超过容器的高度,以使图像与其他元素/组件重叠?
- javascript - 如何在反应原生地图中拖动我当前的位置标记?
- docker - Docker Stack 部署组合无法正常工作
- java - 无法再在任何 IDE 上运行 JavaFX
- angular - Angular 应用程序无法在 Docker 中启动,缺少 angular-devkit package.json