2017-11-17 1 views
0

私のOracleデータベースでは、2つの数字で< =の比較を行うと、奇妙な動作に気付きました。そして私はその問題を発見した。 .netコードは、文字列型のDbParameterとして値の1つを渡していました。そして、他の数字のOracleの列の型はvarcharでした。だから本質的に起こっていたのは< =実際にはvarcharsであった2つの数字です。どうしますか? <= 2つのvarchars?

PLSQLで次のような記述が正しい理由を説明できますか?

'10000001' <= '50000' 
+2

1種類5 ASCIIabetically前。 – tadman

+0

これは数字比較とは異なる動作をする文字列比較です。 – NendoTaka

+2

[データ型の比較](https://docs.oracle.com/database/121/SQLRF/sql_elements002.htm#SQLRF30027)のルールを参照してください。基本的に、 '' 1''はあなたのキャラクタセットの文字として比較されるとき、 ''より小さい '' ''です。 –

答えて

1

Becuase-

SQL> select ascii('10000001') from dual; 

ASCII('10000001') 
----------------- 
       49 

SQL> select ascii('50000') from dual; 

ASCII('50000') 
-------------- 
      53 

SQL> select 'true' from dual where ascii('10000001') < ascii('50000'); 

'TRU 
---- 
true 
関連する問題