如何比较 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_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
是 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
旁边显示意外语法的消息。我尝试使用 CAST
将 S_End
和 P_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
如果你真的想要变量,那么你需要声明它们并设置它们的值。
我正在创建一个查询来提取 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
是 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
旁边显示意外语法的消息。我尝试使用 CAST
将 S_End
和 P_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
如果你真的想要变量,那么你需要声明它们并设置它们的值。