oracle FM去掉了小数点后的0,怎么去掉小数点?

现在出现一个问题,数据库中有一列天数(列名 : ts) 保留一位小数,我需要转换成字符转连接显示多少天 to_char(ts,FM90.9)||'天',但是问题来了 ,0.5天的现在显示'0.5天'但是里面有1.0天,我需要直接显示1天,现在只显示'1.'天,我怎么把这个.去掉???

您可以使用 `FM99990.0` 来格式化转换,这样可以将小数点后面的 0 去掉,同时可以保留一位小数。具体地:
```
to_char(ts, 'FM99990.0') || '天'
```
例如,如果 `ts` 的值是 1.0,则上述语句返回的结果是 `'1天'`;如果 `ts` 的值是 0.5,则返回的结果是 `'0.5天'`。追问

这个语句返回的是1.0天

温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-03-24
您好,可以使用以下SQL语句去除Oracle FM中小数点后的0:
SELECT TO_CHAR(123.450, 'FM999999999990D999999999') FROM DUAL;
输出结果为:"123.45",小数点后的0已被去除。
希望能对您有所帮助。追问

我的问题是123.0的话怎么只显示123,而不是显示123.

第2个回答  2023-03-24
你可以使用以下SQL语句来将列名为"ts"的天数列保留一位小数,并将其转换为字符型,如果小数部分为0,则只显示整数部分,否则显示小数部分:
SELECT CASE

WHEN MOD(ts, 1) = 0 THEN to_char(ts, 'FM99990') || '天'
ELSE to_char(ts, 'FM99990.9', 'NLS_NUMERIC_CHARACTERS=''.,''') || '天'
END AS ts_display
FROM your_table;
上述SQL语句使用了CASE表达式和MOD函数来判断小数部分是否为0,如果小数部分为0,则使用"FM99990"格式化整数部分,否则使用"FM99990.9"格式化小数部分和整数部分。其中,"FM"表示去掉前导空格,"99990"表示至少显示5位整数,"9"表示显示一位小数。
另外,为了保证小数点的正确显示,还需要在to_char函数的第三个参数中指定小数点的显示字符为".",千位分隔符的显示字符为","。具体地,可以使用"NLS_NUMERIC_CHARACTERS=''.,'''"来指定这些参数。
通过这样的方式,即可实现将小数部分为0的天数显示为整数部分加上"天",而小数部分不为0的天数显示为带一位小数的数字加上"天",并且不显示小数点的情况下保留小数部分。
相似回答