[英]SQL Server : CASE in WHERE clause
我需要創建一個SQL語句來檢查條件,如果該列為null,它將執行其他條件。 以下是我的示例:
SELECT
REPLACE(xxShip.Shipment_Date, '/', '-') AS ShipDate,xxShip.Customer,
xxShip.TravelSheetNo
FROM
(SELECT
RANK() OVER (PARTITION BY TravelSheetNo ORDER BY created_on DESC) AS shipwocode,
ShipDate, ShipTime, Shipment_Date,
Customer, Product_no, TravelSheetNo,
[status], ProcessLotNo
FROM
xxDEShipment) xxShip
WHERE
xxShip.shipwocode = 1
AND xxShip.TravelSheetNo = 'ABC'
--here i need to check the condition----------------------------
AND (CASE
WHEN ISNULL(xxShip.Shipment_Date,'') != '' OR xxShip.Shipment_Date != ''
THEN
xxShip.Shipment_Date IS NULL OR xxShip.Shipment_Date = ''
ELSE
CONVERT(DATETIME, xxShip.Shipment_Date) >= @DATESTART and CONVERT(DATETIME, xxShip.Shipment_Date) <= @DATEEND
END)
請幫忙。 謝謝
這應該是這樣的:
AND(
(ISNULL(xxShip.Shipment_Date,'') <> '' AND
CONVERT(DATETIME, xxShip.Shipment_Date) >= @DATESTART AND
CONVERT(DATETIME, xxShip.Shipment_Date) <= @DATEEND
)
OR ISNULL(xxShip.Shipment_Date,'') == ''
)
請注意,將日期存儲為字符串是一種不好的做法。
如果您需要選擇@DATESTART
和@DATEEND
之間的日期, 或者為空或空日期,請使用以下方法:
ISNULL(CONVERT(DATETIME, NULLIF(xxShip.Shipment_Date, '')), @DATESTART)
BETWEEN @DATESTART AND @DATEEND
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.