首页 > 解决方案 > 仅当所有十进制值为 0 时才删除十进制值

问题描述

如果所有值都为零,我需要选择一个删除所有十进制值的列。

这是输入表的样子,MYCOLUMN 是一个 numeric(18,2) 类型的字段:

+--------+
|MYCOLUMN|
+--------+
|1.00    |
+--------+
|1.00    |
+--------+
|1.50    |
+--------+
|2.00    |
+--------+
|2.60    |
+--------+

这是我试图从我的选择中实现的目标:

+--------+
|MYRESULT|
+--------+
|1       |
+--------+
|1       |
+--------+
|1.50    |
+--------+
|2       |
+--------+
|2.60    |
+--------+

我尝试了一个简单的 CASE 语句,但不幸的是它似乎不起作用。

SELECT CASE WHEN MYCOLUMN % 1 <> 0 THEN MYCOLUMN ELSE CONVERT(INT, MYCOLUMN) END as MYRESULT

这些值都保留为十进制格式。

标签: sqlsql-servercastingcase

解决方案


要以不同的格式表示它,您需要转换为字符串。因此,您不妨这样做:

select replace(cast(col as varchar(255)), '.00', '')

推荐阅读