什么是最好的方法,总是得到2小数点后的值返回由Oracle?
目前我正在包装所有数据库相关的PHP函数在number_format
等,但我想把这些直接在SQL查询。
更好的是有一个环境变量,我可以设置或类似的,当我连接到Oracle,这样我就不必这样做?
function OrderNetTotal($id) {
global $dbh;
$sth = $dbh->prepare("SELECT net_total FROM order_totals WHERE order_no = $id");
$sth->execute();
$result = $sth->fetchAll();
return number_format((float)$result[0]['0'], 2, '.', '');
}
注意:我不能编辑数据库模式等
你可以直接用ROUND()
$sth = $dbh->prepare("SELECT ROUND(net_total,2) FROM order_totals WHERE order_no = $id");
或者更好:
$sth = $dbh->prepare("SELECT TO_CHAR(net_total,'99.99') FROM order_totals WHERE order_no = $id");
取决于您是想以某种格式显示数字还是想进行一些算术运算。
使用TO_CHAR和格式修饰符。
例如,SQL> SELECT TO_CHAR(123456.7890, 'fm9999999.99') FROM dual;
TO_CHAR(123
-----------
123456.79
输出的数据类型是字符串,而不是数字。
使用 round 来四舍五入,并保持数据类型为number。
例如,SQL> SELECT ROUND(123456.7890, 2) FROM dual;
ROUND(123456.7890,2)
--------------------
123456.79
您可以使用DECODE在数字为零时不舍入,并使用NVL处理空值。
SQL> WITH data AS
2 ( SELECT 123.456 num FROM dual UNION
3 SELECT NULL FROM dual UNION
4 SELECT 0 FROM dual
5 )
6 SELECT num, NVL(DECODE(num, 0, 0, ROUND(num, 2)), 0) num FROM data;
NUM NUM
---------- ----------
0 0
123.456 123.46
0