1
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  

最初の結果が 2 番目の結果と異なるのはなぜですか?</p>

4

1 に答える 1

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)

注意1 - filter(TO_NUMBER("NO")=0080000)- 暗黙の型変換。データは数値として比較されます。この場合、0080000 は 80000 に等しくなります。ただし、2 番目のケースでは文字列 ( 1 - filter("NO"='0080000')) として比較されますが、この場合は異なります。

于 2013-07-10T03:34:14.963 に答える