簡體   English   中英

案例語句未按預期返回 null

[英]Case statement not returning null when expected

我有一個案例語句,它使用邏輯來刪除訂單號。 但是我無法弄清楚為什么返回某些值而不是null

結果

t3.LMS_SalesOrder_ExternalRef t3,
t2.LMS_SalesOrder_ExternalRef t2,
                case
                    when        t3.LMS_SalesOrder_ExternalRef IS NOT NULL 
                    and         t3.LMS_SalesOrder_ExternalRef LIKE '%-%' or t3.LMS_SalesOrder_ExternalRef LIKE '%_%' 
                        then    
                            case    when t3.LMS_SalesOrder_ExternalRef LIKE '%-%' 
                                        then LEFT(t3.LMS_SalesOrder_ExternalRef, charindex('-', t3.LMS_SalesOrder_ExternalRef) - 2) 
                                    when t3.LMS_SalesOrder_ExternalRef LIKE '%_%' 
                                        then LEFT(t3.LMS_SalesOrder_ExternalRef, charindex('_', t3.LMS_SalesOrder_ExternalRef) - 2) 
                            end
                    when        t2.LMS_SalesOrder_ExternalRef LIKE '%-%' 
                    and         ASCII(LEFT(t2.LMS_SalesOrder_ExternalRef, charindex('-', t2.LMS_SalesOrder_ExternalRef)) ) BETWEEN 48 AND 57 
                        then        replace(LEFT(t2.LMS_SalesOrder_ExternalRef, charindex('-', t2.LMS_SalesOrder_ExternalRef) - 1), '-', '')
                    when        t2.LMS_SalesOrder_ExternalRef LIKE '%_%'
                        then        SUBSTRING(t2.LMS_SalesOrder_ExternalRef, CHARINDEX('_',t2.LMS_SalesOrder_ExternalRef) + 1, LEN(t2.LMS_SalesOrder_ExternalRef))
                    else        null
                end                                                                                     as omOrder

所以當t3不是null時,拉出右邊的7位數字

當 t3 為 null 時,從 t2 拉出 7 位數字

為什么 else null 不處理結果第 3 行中的值? 在這種情況下,omOrder 應該是 null。

當 t3 為 null 且 t2 不包含 _ 或 - 如結果的第 3 行所示時,我如何獲得 omOrder 的 null

該邏輯還處理 t2 和 t3 中的值由 - 分隔的情況

如果這是您想要的邏輯:

所以當t3不是null時,拉出右邊的7位數字

當 t3 為 null 時,從 t2 拉出 7 位數字

那么邏輯是:

select coalesce(right(t3.LMS_SalesOrder_ExternalRef, 7),
                right(t2.LMS_SalesOrder_ExternalRef, 7)
               )

如果您需要驗證確實存在 7 位數字,則可以使用case

select (case when t3.LMS_SalesOrder_ExternalRef like '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
             then right(t3.LMS_SalesOrder_ExternalRef, 7)
             when t2.LMS_SalesOrder_ExternalRef like '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
             then right(t2.LMS_SalesOrder_ExternalRef, 7)
        end)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM