【发布时间】:2016-03-11 05:58:42
【问题描述】:
我在 Oracle 11 上使用 TOAD 时遇到了一个有趣的结果。相同的查询有时会返回正确的值,有时则不会。没有分组依据。没有加入。我错过了什么吗?
查询是将所有数字转换为数值,然后多个 3 或多个 1 取决于它们的位置,然后求和。
该字段定义为“device_id VARCHAR2(25);”
以下查询返回182,是正确值91的两倍。如果将条件更改为ii.device_id = '20637320050504',则正确值为67。
select sum(to_number(substr( ii. device_id, 1, 1 ))*3 +
to_number(substr(ii. device_id, 13, 1 ))*3 + to_number(substr(ii. device_id, 12, 1 )) +
to_number(substr(ii. device_id, 11, 1 ))*3 + to_number(substr(ii. device_id, 10, 1 )) +
to_number(substr(ii. device_id, 9, 1 ))*3 + to_number(substr(ii. device_id, 8, 1 )) +
to_number(substr(ii. device_id, 7, 1 ))*3 + to_number(substr(ii. device_id, 6, 1 )) +
to_number(substr(ii. device_id, 5, 1 ))*3 + to_number(substr(ii. device_id, 4, 1 )) +
to_number(substr(ii. device_id, 3, 1 ))*3 + to_number(substr(ii. device_id, 2, 1 )) ) as total
from identifier ii
where ii. device_id = '55019315060289'
我尝试从我的表定义中修改查询如下,结果是正确的。
select sum(to_number(substr( '55019315060289', 1, 1 ))*3 +
to_number(substr('55019315060289', 13, 1 ))*3 + to_number(substr('55019315060289', 12, 1 )) +
to_number(substr('55019315060289', 11, 1 ))*3 + to_number(substr('55019315060289', 10, 1 )) +
to_number(substr('55019315060289', 9, 1 ))*3 + to_number(substr('55019315060289', 8, 1 )) +
to_number(substr('55019315060289', 7, 1 ))*3 + to_number(substr('55019315060289', 6, 1 )) +
to_number(substr('55019315060289', 5, 1 ))*3 + to_number(substr('55019315060289', 4, 1 )) +
to_number(substr('55019315060289', 3, 1 ))*3 + to_number(substr('55019315060289', 2, 1 )) ) as total
from dual;
看起来这不是 TOAD 或 Oracle 问题,但我无法弄清楚我做错了什么。谢谢。
【问题讨论】:
-
我会尝试
select ii. device_id from identifier ii where ii. device_id = '55019315060289'并确认返回的行数或在执行 To_number 之前执行 SELECT DISTINCT。 -
嗯,就是这个原因。请将其标记为答案,我会接受。非常感谢!