簡體   English   中英

SQL Server:強制轉換列數據類型

[英]SQL Server: casting the column datatype

SQL Server 2005/2008年

我為SQL查詢保留了一個CASE條件,該條件導致Float / Numeric Value。 CASE條件之一就是說N / A。 我保留了這段代碼。

對於列: Compliance -可能的值為N / A,100.0,99.1 ...(nvarchar,float)。

select 
    x.MemberName, x.DOB, x.FilePath, 
    x.Medication, x.NDC, x.Directions, 
    x.Name, x.Strength, x.GenericName,
    x.QtyOrdered, x.DaysSupply, x.DateFilled, 
    CASE WHEN x.test = 0 THEN 'N/A' 
         WHEN compliance > 100.0 THEN '100.0' 
         ELSE CAST(FLOOR(compliance * 10)/10.0 AS DECIMAL(3, 1)) 
    END AS [Compliance]

以上語法將錯誤溢出為..

訊息8114,第16級,州5,第10行
將數據類型varchar轉換為數字時出錯。

我應該如何鍵入該字段?

CASE是一個返回單個結果的表達式,無論其路徑是什么,它總是需要得到相同的數據類型(或隱式轉換為相同的數據類型)。 嘗試:

...
CASE 
    WHEN x.test = 0           THEN 'N/A' 
    WHEN compliance > 100.0   THEN '100.0' 
    ELSE CONVERT(VARCHAR(5), CAST(FLOOR(compliance *10)/10.0 AS DECIMAL(3,1))) 
    END AS as [Compliance];

您在CASE語句中不一致,需要為所有選項提供相同的數據類型作為結果。

 CASE WHEN x.test = 0 THEN 'N/A' 
     WHEN compliance > 100.0 THEN '100.0' 
     ELSE CAST(FLOOR(compliance * 10)/10.0 AS DECIMAL(3, 1)) 
 END AS [Compliance]

由於前兩個選項返回一個字符串( 'N/A''100.0' ),因此您的最后一個選項還必須返回一個字符串值:

 CASE WHEN x.test = 0 THEN 'N/A' 
     WHEN compliance > 100.0 THEN '100.0' 
     ELSE CAST(CAST(FLOOR(compliance * 10)/10.0 AS DECIMAL(3, 1)) AS VARCHAR(20))
 END AS [Compliance]

暫無
暫無

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

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