如何解决“将数据类型varchar转换为float时出错”:如何解决我的SQL查询中的此错误?
我正在使用SQL Server 2014,并且具有以下T-SQL查询:
USE MyDatabase
;with cte1 as (
SELECT ID,Name,Age
from [Table1]
Where ([Age] is NOT NULL OR [Age] >= 18)
),cte2 as
(
Select *,(case when [Age] between 18 and 24 then '18 - 24'
when [Age] between 25 and 35 then '25 - 35'
when [Age] between 36 and 45 then '36 - 45'
when [Age] between 46 and 55 then '18 - 24'
when [Age] between 56 and 65 then '18 - 24'
when [Age] > 65 then 'Above 65'
ELSE [Age]
END) as [Age Group]
from [cte1]
)
SELECT *
from [cte2]
运行上面的代码时,出现以下错误:
将数据类型varchar转换为float时出错。
我知道该错误与我的[年龄] case expression
有关,因为当我从查询中删除该case expression
时,它运行正常。
注意:我表中的[年龄]列的类型为float
,并包含NULL。
我尝试了此处提供的答案,但仍收到相同的错误消息:Error converting data type varchar to float
如何解决此错误?
解决方法
case表达式需要所有返回类型都相同。您混合了字符串和浮点数。将float转换为字符串即可使用。
CASE WHEN [Age] BETWEEN 18 AND 24 THEN '18 - 24'
WHEN [Age] between 25 and 35 THEN '25 - 35'
WHEN [Age] between 36 and 45 THEN '36 - 45'
WHEN [Age] between 46 and 55 THEN '18 - 24'
WHEN [Age] between 56 and 65 THEN '18 - 24'
WHEN [Age] > 65 THEN 'Above 65'
-- Conversion required here
ELSE CONVERT(VARCHAR(12),[Age])
END AS [Age Group]
注意:我认为您查询的内容比您发布的要多,否则就没有理由拥有2个CTE。
, CASE
表达式混合了不同类型(浮点型和文本型)的结果。这在SQL中不起作用,因为SQL中的每个查询/语句都必须返回单个类型。
SQL Server将尝试使用Data type precedence规则将所有值转换为单个类型,而不是更普通的类型,而不是更特定的类型。 float
的优先级高于varchar
,因此服务器将尝试将所有值强制转换为float
并失败。
ELSE
子句将不得不返回varchar
,例如:
ELSE cast(Ages as varchar(4))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。