如何比较 SQL Server 2016 中的两列,如果不相等,则根据条件将它们设置为相等?

How do I compare two columns in SQL Server 2016 and if not equal, set them equal based off a condition?

我正在创建一个查询来提取 ID、日期、状态等信息。除了这部分,我几乎完成了所有工作。我正在尝试比较两个变量(我将在此处调用 S_EndP_EndDate),如果 P_EndDateS_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 是 before/after S_End 但我真的不确定如何 compare/set S_End = P_EndDate .我尝试使用类似于

IF 语句
IF S_End > P_EndDate 
   BEGIN 
      S_End  = P_EndDate 
   END
ELSE 
   BEGIN
      S_End  = S_End  
   END

但我不断收到语法错误或在 IF 旁边显示意外语法的消息。我尝试使用 CASTS_EndP_EndDate 都转换为 YYYY/MM/DD 然后进行比较,但仍然没有成功。我觉得这是我应该知道的简单事情,但我不确定如何去做。

SQL 变量以“@”符号开头。这些看起来像柱子。如果您想设置列,那么...

UPDATE myTable
SET S_End = P_EndDate
WHERE S_End > P_EndDate

如果您不想更改数据,只想让您的查询在这些情况下显示 P_EndDate,则使用 case 语句:

SELECT status, ID, SStart, S_End = CASE
   WHEN S_End > P_EndDate THEN P_EndDate
   ELSE S_End
   END, P_EndDate, comment FROM myTable
WHERE SStart IS NOT NULL AND STATUS = 'NOT DONE' AND S_End <> P_EndDate

如果你真的想要变量,那么你需要声明它们并设置它们的值。