[英]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.