【发布时间】:2020-02-05 23:42:21
【问题描述】:
如果所有值都为零,我需要选择一列删除所有十进制值。
下面是输入表的样子,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
所有值都保持十进制格式。
【问题讨论】:
-
请注意——在可能的情况下(例如此处),CAST 通常比 CONVERT 更受欢迎,因为 CONVERT 是特定于 SQL 服务器的,而 CAST 是在 ANSI SQL 标准中。
-
好吧,3 MOD 1 是...3,所以不会找到你的小数。您可以检查 FLOOR(MyColumn) = MyColumn
-
格式化数据以供显示最好在表示层完成,而不是在 T-SQL 中完成。
-
这是因为您不能在单个列中混合数据类型。您可以转换为 int,但小数数据类型具有更高的优先级,因此 int 值将被隐式转换回小数。
-
谢谢丹和肖恩。明白了。
标签: sql sql-server casting case