我有这个SQL查询:
select prefix, code, stat, complete, COUNT(*) as Count
from table
group by prefix, code, stat, complete
order by prefix, code, stat, complete
列'前缀'是字母数字值(0-9a-zA-z)。 我想要的是使它如果前缀的值是一个数字,使数字等于0.如果它是一个字母,它将保持其值。我试图在group by子句下面添加以下行:
(case when prefix like '%[0-9]%' then 0 else prefix end)
但是我收到错误“将varchar值'J'转换为数据类型int时转换失败。”。
导致此错误的原因是什么?如何让'prefix'列显示0或字母?
答案 0 :(得分:7)
case when prefix like '%[0-9]%' then '0' else prefix end
你显然也需要这个作为GROUP BY
:
select
NewPrefix = case when prefix like '%[0-9]%' then '0' else prefix end,
code,
stat,
complete,
COUNT(*) as Count
from table
group by
case when prefix like '%[0-9]%' then '0' else prefix end,
code, stat, complete
order by
case when prefix like '%[0-9]%' then '0' else prefix end,
code, stat, complete
答案 1 :(得分:1)
试试这个:
select case when prefix not like '%[^0-9]%' then prefix else '0' end as prefix, code, stat, complete, COUNT(*) as Count
from table
group by case when prefix not like '%[^0-9]%' then prefix else '0' end, code, stat, complete
order by prefix, code, stat, complete
答案 2 :(得分:0)
如果前缀可以包含多个字符,那么您可能需要以下内容:
(case when prefix not like '%[^0-9]%' then '0' else prefix end)
或:
(case when isnumeric(prefix) = 1 then '0' else prefix end)
答案 3 :(得分:-1)
我刚刚在工作中做了这样的事情。
select case when isnumeric(prefix) = '1' then '0' else prefix end as BEST_ANSWER
, code
, stat
, complete
, COUNT(*) as Count
from table
group by prefix, code, stat, complete
order by prefix, code, stat, complete
isnumeric是一个TSQL函数,用于测试它是否为有效数字,如果是,则返回1. case语句表示,如果等于1,则将其设为零,否则返回原始值。顺便说一句,一般来说,你想远离'喜欢',因为它对性能不利。