You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL多列查询中CAST函数的使用及类型转换报错解决

问题解决:SQL中CAST函数的正确使用及营收计算修正

错误原因

你遇到的Msg 245错误,是因为adr字段存储的是带小数的字符串(如'111.6'),直接用CAST(adr AS int)转换会失败——int类型只能存储整数,无法处理包含小数的字符串值。

正确的SQL写法

基础修正版

先修正数据类型转换,同时调整运算逻辑(营收应为总入住晚数 × 单价,需给晚数求和加括号保证运算顺序):

SELECT 
    (CAST(stays_in_week_nights AS INT) + CAST(stays_in_weekend_nights AS INT)) * 
    CAST(adr AS DECIMAL(10,2)) AS revenue
FROM 
    Hotels
  • 用DECIMAL(10,2)替代INT转换adr,既能处理带小数的字符串,又能保留两位小数符合金额场景。
  • 给stays_in_week_nights + stays_in_weekend_nights加括号,确保先计算总入住晚数,再乘以单价,符合营收计算逻辑。

容错增强版

如果adr或入住晚数字段存在非数字的无效字符串,可使用TRY_CAST(SQL Server支持),转换失败时返回NULL,避免整个查询中断:

SELECT 
    (TRY_CAST(stays_in_week_nights AS INT) + TRY_CAST(stays_in_weekend_nights AS INT)) * 
    TRY_CAST(adr AS DECIMAL(10,2)) AS revenue
FROM 
    Hotels

CAST函数使用要点

  • 转换目标类型要匹配数据内容:如果源数据是带小数的数值字符串,不要转INT,改用DECIMAL、FLOAT等支持小数的类型。
  • 注意运算优先级:SQL中乘法优先级高于加法,涉及混合运算时记得用括号明确运算顺序。
  • 处理脏数据:如果字段可能存在无效值,优先用TRY_CAST/TRY_CONVERT提升查询稳定性。

内容的提问来源于stack exchange,提问作者lora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 02:20:16