如何解决json_value 中的科学记数法数字与另一个数字不匹配
我遇到了一个问题,我需要匹配两个表中的数字。
我的第一个表有下一个数字,例如:
AMOUNT
------------
123456789,92
我的第二张桌子有:
MSGTOSEND_0182
-------------------------------------------------------------------------------------------------------------------------
{"amount":1.2345678992E8,"notes":"Nomina a Martin","transactionDetails":{"transactionChannelId":"_ach_enviada"}}
我的查询与以下内容进行比较:
REPLACE(AMOUNT,','.')) = REPLACE(JSON_VALUE(MSGTOSEND_0182,'$.amount'),'.'))
结果为空,没有匹配,但如果我在 Notepad++ 中解析 JSON,数字是相同的。
为什么它们在 Oracle 中不匹配?
解决方法
虽然简单的数字比较works in 18c:
Widget build(BuildContext context) {
return LayoutBuilder(builder: (context,size) {
final span = TextSpan(text: lorem);
final tp = TextPainter(text: span,maxLines: 30);
tp.textDirection = TextDirection.ltr;
tp.layout(maxWidth: size.maxWidth);
if (tp.didExceedMaxLines) {
return Container(color: Colors.red);
} else {
return Text(lorem);
}
});
...它在早期版本中不起作用 - 至少在 12cR1 中,其中 select *
from zmt join po
on ZMT.AMOUNT = JSON_VALUE(PO.MSGTOSEND_0182,'$.amount' RETURNING NUMBER)
首次被引入。将 json_value
设置为 NLS_NUMERIC_CHARACTERS
(因此句点作为小数点分隔符)您的字符串版本匹配,但数字版本不匹配;并使用 '.,'
(所以逗号作为小数点分隔符,正如您所拥有的那样)字符串或数字版本都不匹配。
作为一种解决方法,您可以将 JSON 值作为字符串获取,然后将其显式转换为数字:
',.'
...在 18c 中不起作用,因为 JSON 值以数字形式返回(或者至少是格式化为字符串的数字);这不是不合理的。但是版本之间不一致。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。