"Error converting data type varchar to float":如何解决我的 SQL 查询中的这个错误?

"Error converting data type varchar to float": how to get around this error in my SQL query?

我正在使用 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]

当我运行上述代码时,出现以下错误:

Error converting data type varchar to float.

我知道错误与我的 [年龄] case expression 有关,因为当我从查询中删除 case expression 时,它 运行 没问题。

注意:我的 table 中的 [Age] 列的类型为 float 并且包含 NULL。

我已经尝试了此处提供的答案,但仍然收到相同的错误消息:Error converting data type varchar to float

如何解决这个错误?

case 表达式需要所有 return 类型都相同。你混淆了字符串和浮点数。将浮点数转换为字符串即可。

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 表达式混合了不同类型的结果,float 和 text。这在 SQL 中不起作用,其中每个 query/statement 必须 return 一种类型。

SQL 服务器将尝试使用 Data type precedence 规则将所有值转换为单一类型,优先选择更具体的类型而不是更通用的类型。 float 的优先级高于 varchar,因此服务器将尝试将所有值转换为 float 并失败。

ELSE 子句必须 return 一个 varchar 代替,例如:

ELSE cast(Ages as varchar(4))