SQL Server 日期比较问题
Posted
技术标签:
【中文标题】SQL Server 日期比较问题【英文标题】:SQL Server Date Comparison issue 【发布时间】:2021-11-03 17:23:34 【问题描述】:每当两个日期的关系不正确时,我都会尝试在不同的表中标记一个字段。但是,数据集中的所有日期都不应标记任何内容(应为 0 而不是 1),但它们都标记。在查询期间更改日期格式是否有问题?真的卡在这里了
Example output
UPDATE Theatre_DQ_03_Integrity_CASES
SET AnaesToTheatreFlag = 1, TimeErrorFlag = 1
FROM Theatre_Cases_Landing a
INNER JOIN
(
SELECT Case_ID
FROM Theatre_Cases_Landing
WHERE (CaseCancelled IS NULL or CaseCancelled = 'N') AND (CONVERT(datetime,Anaesthetic_Start_DateTime) > CONVERT(datetime,In_Theatre_DateTime))
AND Anaesthetic_Start_DateTime IS NOT NULL AND In_Theatre_DateTime IS NOT NULL
) b
ON a.Case_ID = b.Case_ID
declare @var1 as datetime2 = '2019-09-04 11:12:00.000'
declare @var2 as datetime2 = '2019-09-04 11:13:00.000'
if @var1 < @var2 PRINT('TRUE')
【问题讨论】:
我没有看到目标表 (Theatre_DQ_03_Integrity_CASES
) 和 FROM/JOIN 条件之间存在关联,因此表中的每一行都会更新。
@DanGuzman 你如何解决这个问题?相同的内部连接方法似乎适用于其他目的?这两个表都与案例 ID 相关,谢谢
您能否在Theatre_Cases_Landing
中显示您认为有问题的一行?也许您的日期时间比较不适合您的要求。我假设您不认为 Anaesthetic_Start_DateTime
应该在 In_Theatre_DateTime
之前(对于未取消的案例)并希望 update
这些案例。如果您可以显示任何未正确处理的案例(带有日期时间),那将有所帮助。
在查询期间更改日期格式是否有问题? - 您将日期时间存储在 varchars 中?
根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
【参考方案1】:
您需要将要更新的行与其他表中的行关联起来。否则,目标中的每一行都会被更新。
我认为不需要自行加入 Theatre_Cases_Landing
。以下是相关性未经测试的版本。
UPDATE target
SET AnaesToTheatreFlag = 1, TimeErrorFlag = 1
FROM Theatre_DQ_03_Integrity_CASES AS target
JOIN Theatre_Cases_Landing AS a ON a.Case_ID = target.Case_ID
WHERE
(a.CaseCancelled IS NULL or a.CaseCancelled = 'N')
AND CONVERT(datetime,a.Anaesthetic_Start_DateTime) > CONVERT(datetime,a.In_Theatre_DateTime)
AND a.Anaesthetic_Start_DateTime IS NOT NULL
AND a.In_Theatre_DateTime IS NOT NULL;
【讨论】:
成功了,非常感谢。这只是我使用 SQL 的第二周,所以还在学习!非常有帮助:)以上是关于SQL Server 日期比较问题的主要内容,如果未能解决你的问题,请参考以下文章
将日期字符串与 SQL Server 中的日期时间进行比较?
SQL Server:仅比较月份和日期 - SARGable