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

SQL Server中varchar转int失败求助:统计不同Type的MachineID数量

问题描述

需要统计数据表中Type为R和Type为C时的MachineID数量,编写的查询语句报错:

Conversion failed when converting the varchar value 'gvpm236b' to data type int.

尝试CONVERT和CAST方法均无效,原查询语句如下:

SELECT
    COUNT (CASE WHEN Type = 'R' THEN CONVERT(int, MachineID) ELSE 0 END) AS 'Non-Persistant',
    COUNT (CASE WHEN Type = 'C' THEN CONVERT(int, MachineID) ELSE 0 END) AS 'Persistant' 
FROM
    table

示例数据

MachineIDType
gvpm236bR
123456C
111C
123R

期望输出

Non PersistantPersistant
22
解决方法

你的问题根源在于:

  1. CASE表达式要求THEN和ELSE返回值的类型必须一致,当Type='R'时,gvpm236b是无法转为int的字符串,直接触发转换错误。
  2. 统计符合条件的记录数,完全不需要转换MachineID的类型——COUNT只统计非NULL值,只要在满足条件时返回非NULL值,不满足时返回NULL就行。

推荐两种简单有效的写法:

写法一:COUNT配合CASE(利用NULL不被计数的特性)

SELECT
    COUNT(CASE WHEN Type = 'R' THEN MachineID END) AS 'Non Persistant',
    COUNT(CASE WHEN Type = 'C' THEN MachineID END) AS 'Persistant'
FROM
    [table]

当条件不满足时,CASE默认返回NULL,COUNT会自动忽略这些NULL值,最终结果就是符合条件的记录数。

写法二:SUM配合CASE(直接累加计数)

SELECT
    SUM(CASE WHEN Type = 'R' THEN 1 ELSE 0 END) AS 'Non Persistant',
    SUM(CASE WHEN Type = 'C' THEN 1 ELSE 0 END) AS 'Persistant'
FROM
    [table]

这种写法更直观:满足条件时加1,不满足时加0,SUM的结果就是目标数量,完全避开了类型转换的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:04:56