簡體   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