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