簡體   English   中英

Null的大小寫表達問題

[英]Case expression issue with Null's

我正在羅斯文(Northwind)數據庫上進行培訓,但被困在案例陳述中,我將查詢放在下面,希望能為您提供幫助。

問題是我希望Shippeddate列中的記錄有一些文本,在這種情況下,當它上有NULL時我將其放置為'ddd',但NULL始終出現在結果集中。

SELECT OrderID, 
       CONVERT(VARCHAR(10), OrderDate, 103)    AS OrderDate, 
       CONVERT(VARCHAR(10), RequiredDate, 103) AS RequiredDate, 
       CASE ShippedDate 
         WHEN NULL THEN 'ddd' 
         ELSE CONVERT(VARCHAR(10), ShippedDate, 103) 
       END                                     AS ShippedDate 
       -- Why is this not working 
       , 
       [UnitPrice]                             AS UnitPriceOnOrder, 
       [Quantity]                              AS QuantityOnOrder, 
       [Discount]                              AS DiscountOnOrder, 
       CompanyName_II                          AS CustomerCompanyName, 
       ContactName_II                          AS CustomerContact, 
       ContactTitle_II                         AS CustomerContactTitle, 
       City_II                                 AS CustomerCity, 
       Country_II                              AS CustomerCountry, 
       ProductName, 
       CategoryName, 
       [Description]                           AS CategoryDescription, 
       UnitsInStock, 
       UnitsOnOrder, 
       UnitsInStock - UnitsOnOrder             AS AvailableUnitsInStock, 
       FirstName + ' ' + LastName              AS EmployeeName 
FROM   ##NorthwindTestI 
WHERE  [Quantity] > 10 
       AND ShippedDate > '19970101' 
        OR [UnitPrice] > 10 
        OR Country_II = 'USA' 
        OR FirstName + ' ' + LastName = 'Janet Leverling' 
ORDER  BY 
--[Quantity] 
ShippedDate 

嘗試使用ISNULL()代替:

所以而不是

CASE ShippedDate 
         WHEN NULL THEN 'ddd' 
         ELSE CONVERT(VARCHAR(10), ShippedDate, 103) 
       END                                     AS ShippedDate 

采用:

ISNULL(CONVERT(VARCHAR(10),ShippedDate,103),'ddd')

因此您的查詢將類似於:

SELECT OrderID, 
       CONVERT(VARCHAR(10), OrderDate, 103)    AS OrderDate, 
       CONVERT(VARCHAR(10), RequiredDate, 103) AS RequiredDate, 
       ISNULL(CONVERT(VARCHAR(10),ShippedDate,103),'ddd') AS ShippedDate 
       -- Why is this not working 
       , 
       [UnitPrice]                             AS UnitPriceOnOrder, 
       [Quantity]                              AS QuantityOnOrder, 
       [Discount]                              AS DiscountOnOrder, 
       CompanyName_II                          AS CustomerCompanyName, 
       ContactName_II                          AS CustomerContact, 
       ContactTitle_II                         AS CustomerContactTitle, 
       City_II                                 AS CustomerCity, 
       Country_II                              AS CustomerCountry, 
       ProductName, 
       CategoryName, 
       [Description]                           AS CategoryDescription, 
       UnitsInStock, 
       UnitsOnOrder, 
       UnitsInStock - UnitsOnOrder             AS AvailableUnitsInStock, 
       FirstName + ' ' + LastName              AS EmployeeName 
FROM   ##NorthwindTestI 
WHERE  [Quantity] > 10 
       AND ShippedDate > '19970101' 
        OR [UnitPrice] > 10 
        OR Country_II = 'USA' 
        OR FirstName + ' ' + LastName = 'Janet Leverling' 
ORDER  BY 
--[Quantity] 
ShippedDate 

使用WHEN ShippedDate IS NULL代替CASE ShippedDate WHEN NULL

SELECT .....,
       CASE WHEN ShippedDate IS NULL  
        THEN 'ddd' 
        ELSE CONVERT(VARCHAR(10), ShippedDate, 103) 
       END  AS ShippedDate 
.....

暫無
暫無

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

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