如果所有值均为零,我需要选择一个删除所有十进制值的列。
这是输入表的样子,MYCOLUMN是一个数字(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
所有值均保留为十进制格式。
答案 0 :(得分:0)
您可以在下面的选项中尝试。但是由于您不能在单个列中混合使用数据类型,因此只有在所需的输出中可接受STRING输出时,才可以使用此选项。
WITH your_table (MYCOLUMN)
AS(
SELECT 1.00 UNION ALL
SELECT 2.25
)
SELECT
CASE
WHEN FLOOR(MYCOLUMN) = MYCOLUMN THEN CAST(FLOOR(MYCOLUMN) AS VARCHAR)
ELSE CAST(MYCOLUMN AS VARCHAR)
END
FROM your_table
答案 1 :(得分:0)
要以不同格式表示此内容,您需要转换为字符串。因此,您也可以这样做:
select replace(cast(col as varchar(255)), '.00', '')
答案 2 :(得分:0)
您几乎明白了,您需要的是转换结果,而不是MYCOLUMN本身。
所以,这个:
SELECT CASE WHEN MYCOLUMN % 1 <> 0 THEN MYCOLUMN ELSE CONVERT(INT, MYCOLUMN) END as MYRESULT
应该是这样
SELECT CAST(CASE WHEN MYCOLUMN % 1 <> 0 THEN MYCOLUMN ELSE MYCOLUMN END AS INT) as MYRESULT
区别在于,第一个将MYCOLUMN强制转换为int,然后将其返回为数字(基本类型)。尽管第二个将数值读取为数字(基本类型),然后获取结果,然后将其转换为int。因此,您将需要将结果强制转换为int,就像在第二个示例中所做的一样。