【发布时间】:2019-07-30 18:03:14
【问题描述】:
我写了一个代码,根据 SQL Server 中的货币场景将成本转换为欧元。但是我收到此错误:
消息 8114,第 16 级,状态 5,第 1 行
将数据类型 varchar 转换为 float 时出错。
请帮帮我。
SELECT
WORK.dbo.['Parts Detail$'].PartNumber,
WORK.dbo.['Parts Detail$'].COST,
CASE
WHEN WORK.dbo.['Parts Detail$'].CURRENCY = 'GBP'
THEN (WORK.dbo.['Parts Detail$'].COST * 1.17)
WHEN WORK.dbo.['Parts Detail$'].CURRENCY = 'USD'
THEN (WORK.dbo.['Parts Detail$'].COST * 0.87)
WHEN WORK.dbo.['Parts Detail$'].CURRENCY = 'EUR'
THEN (WORK.dbo.['Parts Detail$'].COST * 1)
ELSE ('NO CURRENCY AVAILABLE')
END AS CIFCOST
FROM
['Parts Detail$']
【问题讨论】:
-
CASE在 T-SQL 中是一个返回单个原子值的 表达式 - 和 all 路径和返回的所有可能值 必须是相同的数据类型 - 这不是这里的情况!在三种情况下,您返回一个FLOAT- 但在ELSE子句中,您返回一个字符串。 SQL Server 将选择具有最高数据类型优先级的数据类型 - 此处为FLOAT- 并将尝试将所有其他返回值转换为该类型 - 因此出现错误消息..
标签: sql-server