【问题标题】:SQL Server Date Comparison issueSQL Server 日期比较问题
【发布时间】: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 中?
  • 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。

标签: sql sql-server date tsql


【解决方案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 的第二周,所以还在学习!非常有帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多