为什么 Oracle 认为数字越大越小?

1 oracle datatypes

出于某种原因,当我尝试做大于或小于时,它说 100 小于 2。我认为它只是在确定大于/小于值时读取第一个数字。不知道为什么或者它是否应该是这样的?尝试为我的数据库课程创建 Short Ship 报告。

在此处输入图片说明

Phi*_*lᵀᴹ 6

您的数量列被存储为字符串,而不是数字,导致(例如)10“小于”9 - 字符串比较显然基于字符串中的字符而不是整数,因此您看到的结果。

当您进行比较时,Oracle 不会将值转换为数字(在您的情况下为“<”和“>”),但是当您对它们执行数学运算时,它会隐式地将它们转换为数字,因此 -按预期工作。

如果您在进行比较时castVARCHAR列设置为 a NUMBER,您的查询将正常工作:

select *
from orders 
where TO_NUMBER(qty)<TO_NUMBER(qtyshipped);
Run Code Online (Sandbox Code Playgroud)

话虽如此,您最好使用正确的数据类型重新创建表。

演示所有这些的示例 DB Fiddle 在这里