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