簡體   English   中英

SQL Server:WHERE子句中的CASE

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

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