繁体   English   中英

由不同用户运行时,SQL查询中的MAX和COALESCE导致奇怪的结果

[英]Weird result with MAX and COALESCE in a SQL query when run by different users

我有一个SQL Server查询,如果列PredComplDate中至少有一个NULL或存储为NVARCHAR(30)的最新日期,则尝试选择NULL

奇怪的是,当我运行查询时,它会返回正确的结果,但是当我的同事在同一台计算机上运行查询时,它会返回不同的结果。

我保存了当我的同事以不同的名称运行查询时创建的表,并将其与运行查询时创建的表进行比较。 一切都是一样的,记录数,数据类型等,但由于某种原因,查询的下面部分不返回NULL

SELECT [Reference Number],
    CASE 
        WHEN LEN(Predecessors)>0 AND MAX(COALESCE(PredComplDate,'31/12/2099'))='31/12/2099' THEN NULL
        ELSE MAX(PredComplDate)
    END AS LatestPredComplDate
    FROM mytable33
    GROUP BY [Reference Number],Predecessors

这个查询有什么问题?

mytable33由我创建, mytable22由我的同事创建。 当我查询结果相同时:

SELECT Predecessors,[Reference Number], PredRefNo,PredComplDate  FROM mytable22

SELECT Predecessors,[Reference Number], PredRefNo,PredComplDate  FROM mytable33

在此输入图像描述

当我在两个表上运行上述查询时,结果是不同的:

SELECT [Reference Number],
    CASE 
        WHEN LEN(Predecessors)>0 AND MAX(COALESCE(PredComplDate,'31/12/2099'))='31/12/2099' THEN NULL
        ELSE MAX(PredComplDate)
    END AS LatestPredComplDate
    FROM mytable22
    GROUP BY [Reference Number],Predecessors

SELECT [Reference Number],
    CASE 
        WHEN LEN(Predecessors)>0 AND MAX(COALESCE(PredComplDate,'31/12/2099'))='31/12/2099' THEN NULL
        ELSE MAX(PredComplDate)
    END AS LatestPredComplDate
    FROM mytable33
    GROUP BY [Reference Number],Predecessors

在此输入图像描述

对于LastestPredComplDate ,预期结果为NULL

也许您可以将两个子句放在窗口函数中,如下所示(如果只是为了清晰起见):

  MAX(CASE WHEN LEN(Predecessors)>0 THEN NULL ELSE PredComplDate END) AS LatestPredComplDate

最终,我发现了问题。 日期(存储为NVARCHAR)格式是罪魁祸首。 如果您再看一下我发布的第一张图片,您可以看到相同的日期有不同的格式。 一个是04/12/2019 ,另一个是4/12/2019 事实证明MAX函数会考虑4/12/2019大于04/12/2019 ,这会产生不同的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM