2017-11-17 3 views
0

오라클 데이터베이스에서 < = 두 숫자를 비교할 때 이상한 동작이 나타났습니다. 그리고 그 문제를 발견했습니다. 닷넷 코드는 문자열 중 하나의 DbParameter로 전달되었습니다. 그리고 다른 숫자의 Oracle 열 유형은 varchar였습니다. 그래서 근본적으로 무슨 일이 일어 났는지는 < = 실제로 두 개의 숫자로 나타납니다.어떻게됩니까? <= 두 개의 varchars에?

PLSQL에서 다음 문장이 사실 인 이유를 설명 할 수 있습니까?

'10000001' <= '50000' 
+2

1 종류 5 ASCIIabetically 전에. – tadman

+0

이것은 숫자 비교와 다르게 작동하는 문자열 비교입니다. – NendoTaka

+2

무슨 일이 일어나는지 설명하는 [데이터 형식 비교] (https://docs.oracle.com/database/121/SQLRF/sql_elements002.htm#SQLRF30027) 규칙을 참조하십시오. 기본적으로 '1'은 문자 집합의 문자로 비교 될 때 '미만', '5'미만입니다. –

답변

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 
관련 문제