oracle - SQL Plus:如何防止数字的自动舍入
问题描述
我需要使用 SQL Plus 将 Oracle db 值拉到 csv 以比较小数点为 10 位的数值。
但数字会自动四舍五入到小数点后 8 位。有什么方法可以禁用 SQLPlus 中的数字舍入。下面找到详细信息。
这是我的 SQL 集命令。
SET UNDERLINE OFF
SET PAGESIZE 50000
SET NEWPAGE NONE
SET WRAP OFF
SET COLSEP , -- SEPARATE COLUMNS WITH A COMMA
SET FEEDBACK OFF
SET TRIMS ON
SET TRIMSPOOL ON
SET DEFINE ON
SET termout ON
SET verify ON
SET linesize 600
有人可以帮我解决这个问题。
解决方案
数值没有任何内在格式,因此您的客户正在决定如何显示它们。我不确定哪个客户端正在生成“DB”值,但 SQL*Plus 只是使用其默认值:
SQL*Plus 通常显示数字的位数与准确性所需的位数一样多,最高显示宽度由命令
NUMWIDTH
变量的值SET
(通常为 10)确定。如果一个数字大于 的值SET NUMWIDTH
,SQL*Plus 会将数字向上或向下舍入到允许的最大字符数(如果可能),或者如果数字太大则显示散列。
所以你看:
with your_table (x, y) as (
select -0.0224231886, -0.021470109 from dual
union all select -0.037164512, -0.0238026527 from dual
union all select 0.021786217, 0.044550243 from dual
union all select 0.0772262609, 0.0724136521 from dual
union all select 0.968632046, 0.0866250777 from dual
)
select x, y from your_table;
X, Y
-.02242319,-.02147011
-.03716451,-.02380265
.021786217,.044550243
.077226261,.072413652
.968632046,.086625078
您可以使用`set numf[ormat]'更改会话的默认值,使用格式模型在小数点前后有足够的数字来表示您可能存储的任何数字,例如:
set numformat 990.99999999999
然后得到相同的查询
X, Y
-0.0224231886, -0.0214701090
-0.0371645120, -0.0238026527
0.0217862170, 0.0445502430
0.0772262609, 0.0724136521
0.9686320460, 0.0866250777
或者您可以使用以下方式隐式修改它set numw[idth]
:
set numf ""
set numwidth 20
X, Y
-.0224231886, -.021470109
-.037164512, -.0238026527
.021786217, .044550243
.0772262609, .0724136521
.968632046, .0866250777
它为您提供所需的精度,但不显示前导零。如果这无关紧要,那么这种方法更简单。
推荐阅读
- angular - 使用 nginx 作为反向代理在 Azure Service Fabric 中部署 Angular8 应用程序
- python - 告诉脚本等到按钮可点击?
- eclipse - 在 Eclipse 调用时从命令行指定 Eclipse 工作区
- python - 根据先前列中满足的某些条件在数据框中创建新列
- javascript - 无法在阿波罗服务器突变中使用 console.log() 功能
- ruby - 法拉第正在将我的标题从大写更改为大写
- c++ - 如何访问谷歌测试夹具静态变量
- matplotlib - LOWESS曲线下的matplotlib填充
- javascript - axios delete .catch 命令在 void 中不存在
- node.js - axios.get 不返回数据