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