【发布时间】:2019-03-02 15:05:09
【问题描述】:
ReduceDuties.Confirmed_Time 列是:(Nvarchar 类型)
Confirmed_Time
|----------------|
| 5 |
| 3.5 |
| 10 |
| 15 |
| 18 |
我想对数字进行分类。
所需的输出:
1-9 => 2
9-19 => 3
我试过了:
select t.range as [score range], count(*) as [number of occurences]
from (
select convert (float , Confirmed_Time) as Taeid,
case when Confirmed_Time >= 1 and Confirmed_Time <= 9 then '0-9'
when Confirmed_Time > 9 and Confirmed_Time <= 19 then '9-19'
end as range
from ReduceDuties) t
group by t.range
但我收到以下错误:
将 nvarchar 值“3.5”转换为数据时转换失败 输入整数。
【问题讨论】:
-
因为
3.5不是整数值? -
@solmaz ahamdi 尝试在
case when语句中应用floor(),例如case when floor(Confirmed_Time >= 1... -
你为什么首先将数字数据存储为
nvarchar? -
解决此问题的一种方法是在 CASE 表达式中指定十进制文字,例如
Confirmed_Time >= 1.0 and Confirmed_Time <= 9.0。 -
区域格式与将数字数据存储为
nvarchar@SNR 有什么关系?除了应该在表示层处理格式之外,我不知道2 > 10的任何区域。对于 OP 的数据,“最高”值为'5'(最低为'10');我怀疑这是故意的。
标签: sql sql-server tsql