在oracle中是80000 ='00080000'?

Jef*_*hen 1 sql oracle select

SQL> select o.no from Org_Table o where o.no=0080000;   
NO
---
00080000   

SQL> select o.no from Org_Table o where o.no='0080000';  
NO
---

SQL> select o.no from Org_Table o where o.no='00080000';   
NO
---
00080000  
Run Code Online (Sandbox Code Playgroud)

为什么第一个结果与第二个结果不同?

Kir*_*tev 7

使用过滤器谓词检查查询的执行计划.这就是我所看到的(假设no字段是varchar2):

Execution Plan
----------------------------------------------------------
Plan hash value: 2153619298

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |  2002 |     2   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T    |     1 |  2002 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(TO_NUMBER("NO")=0080000)
Run Code Online (Sandbox Code Playgroud)

注意1 - filter(TO_NUMBER("NO")=0080000)- 隐式类型转换.您的数据将作为数字进行比较,在这种情况下,0080000等于80000.但是,在第二种情况下,它将比较为strings(1 - filter("NO"='0080000')),在这种情况下,它们是不同的.