sql - 如何使用 Oracle 将此输入转换为数字
问题描述
我无法从声明为 varchar 的字段中找到正确的十进制数转换。
甲骨文 12c
消息来源说他们设置了这种格式:'S9999999999999V,99'
我使用了 TO_NUMBER() 函数,但找不到正确的转换和参数来正确读取和转换源。
只有 TO_NUMBER(field) 发送和无效号码错误。
数据接收示例
- +0000000000160,00
- -9999999999999,99
我不断收到无效号码错误。
解决方案
源信息格式中的 V 看起来不正确;从文档:
元素 例子 描述 五 999V99 返回一个乘以 10n 的值(如有必要,向上取整),其中 n 是 V 之后的 9 的数量。
如果模型的其余部分是正确的,并且看起来与这两个示例匹配,那么您可能想要:
to_number(source, 'S9999999999999D99', 'NLS_NUMERIC_CHARACTERS=,.')
该fmt
部分与您被告知的部分相同,只是删除了 V,并用 D 标记了小数分隔符;并且该nls
部分说小数分隔符是逗号。
-- CTE for sample data
with your_table (source) as (
select '+0000000000160,00' from dual
union all
select '-9999999999999,99' from dual
)
-- query against sample data
select source,
to_number(source, 'S9999999999999D99', 'NLS_NUMERIC_CHARACTERS=,.') as result
from your_table
给
SOURCE RESULT
----------------- -----------------
+0000000000160,00 160
-9999999999999,99 -9999999999999.99
客户端将选择是否使用逗号或句点小数分隔符显示转换后的值,通常通过 NLS 设置。您可以更改该会话设置,或将数字显式转换回特定格式的字符串。
db<>fiddle显示默认和修改后的会话输出。
推荐阅读
- django - 将警报消息(数据)从一个登录用户会话发送到另一个
- knockout.js - 如何在 Dukescript 中定义可写的计算 observables?
- android - Volley 发送数据时改变的数据类型
- excel - 如何删除熊猫中的字符串
- android - 为什么我没有从 FusedLocationProviderClient 的 requestLocationUpdates 方法获得足够的位置
- swift - 如何在 Swift 4 中隐藏默认的 GSMapView InfoWindowOfMarker UIView 框架?
- haskell - 使用 2 个选项生成自定义数据类型的选择
- sql - 如何删除在sql server中交换了名字/姓氏的重复用户
- python - 错误:在 zmq 中的字符串格式期间并非所有参数都转换了
- postgresql - 在表中插入多行的函数