PHP OCI、Oracle 和默认数字格式
当我使用 PHP OCI 从 Oracle 数据库执行提取时,小于 1 的数字显示为 .XXXXXX,
例如 .249999
。有没有办法将其设置为 0.XXXXXX
或任何其他格式,而无需修改每个查询以显式使用 to_char()
? (也许通过一些会话参数?)
When I execute a fetch from an Oracle database using PHP OCI, numbers that are less than 1 are shown as .XXXXXX,
e.g. .249999
. Is there a way to set this to 0.XXXXXX
or to any other format, without modifying every query to use to_char()
explicitly? (Perhaps through some session parameters?)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用 PHP,您可以通过转换为浮点数轻松添加 0:
这意味着您可以
在从数据库获取数字后转换您的数字。
Using PHP you can easily add the 0, by converting to float:
Meaning you can convert your number by
after fetching it from the DB.
如果不修改 php/oci-extension 源代码,就无法完成您在全球范围内提出的要求。出现此行为的原因是因为 oracle oci 在结果中省略了 0,而 php 将所有结果从 oci 转换为字符串,而不根据列数据类型执行任何转换。即使 SQL*Plus 中的结果默认情况下也会省略 0,并且必须使用
set numformat
调用 SQL*Plus 格式来自定义列格式并在前面添加 0。当前没有可以设置的更改会话参数来更改此行为。
解决此问题的最常见方法是使用查询包装器并使用
is_numeric
检查数字列,然后使用number_format
或sprintf 格式化数字列值
。希望您的应用程序已经使用了 php oci 函数的包装器,这样您就可以在一个位置进行更改。There is no way to do what you're asking globally short of modifying php/oci-extension source code. The reason for this behavior is because oracle oci omits 0s in results and php converts all results from oci to strings without performing any casting depending on column datatype. Even results in SQL*Plus omit 0 by default, and SQL*Plus formatting has to be invoked with
set numformat
to customize column formatting and prepend 0s.There is currently no alter session parameter you can set to change this behavior.
Most common way to work around this is to use a wrapper around your queries and check for numeric columns with
is_numeric
and then format the numeric column values withnumber_format
orsprintf
. Hopefully your application already uses a wrapper around stock php oci functions so you can make the change in one location.如果您需要修复多行中的小数,这里有一个函数可以解决它。
If you need to fix decimals numbers in multiple rows, here's a function to solve it.
最简单的选择
$a = '.249999';
回声($a*1);
The simplest option
$a = '.249999';
echo ($a*1);