【发布时间】:2021-09-30 18:42:13
【问题描述】:
我正在创建一个查询来提取 ID、日期、状态等的大量信息。除了这部分之外,我几乎已经完成了所有工作。我正在尝试比较两个变量(我将在这里调用S_End 和P_EndDate),如果P_EndDate 在S_End 之后,那么我需要设置S_End = P_EndDate。
这两个变量的日期都以以下格式存储:YYYY/MM/DD HH:MM:SS。
这是我目前对查询的这个特定部分的内容,只是为了缩小到几个条目将被应用到:
SELECT status, ID, SStart, S_End, P_EndDate, comment FROM myTable
WHERE SStart IS NOT NULL AND STATUS = 'NOT DONE' AND S_End <> P_EndDate
这很有效,让我在P_EndDate 在S_End 之前/之后的位置获得了我需要的几个条目,但我真的不确定如何比较/设置S_End = P_EndDate。我尝试过使用类似于
IF 语句
IF S_End > P_EndDate
BEGIN
S_End = P_EndDate
END
ELSE
BEGIN
S_End = S_End
END
但我不断收到语法错误或在 IF 旁边显示意外语法的消息。我尝试使用CAST 将S_End 和P_EndDate 都转换为YYYY/MM/DD,然后进行比较,但仍然没有运气。我觉得这很容易,我应该知道,但我不确定如何去做。
【问题讨论】:
-
可能是因为
S_End不是变量名。是这些变量,还是您尝试在IF语句中使用列? -
只需使用
CASE表达式CASE WHEN S_End > P_EndDate THEN P_EndDate ELSE S_End END将其放入您的SELECT -
@dougp 是的,我的错。我对此很陌生。谢谢你。
-
@Charlieface 谢谢!
标签: sql sql-server sql-server-2016