비교를 위한 내재적 CAST

표준 SQL 비교 연산자 >, <, >=, <=, =, <>가 ESQL의 두 값을 비교할 때 지원됩니다.

두 값의 데이터 유형이 동일하지 않은 경우 이 중 하나는 다른 유형으로 내재적으로 캐스트되어 비교를 계속할 수 있습니다. 아래의 표에서 수직 축은 왼쪽 피연산자를 나타내고 수평 축은 오른쪽 피연산자를 나타냅니다.

L은 비교 전에 오른쪽 피연산자가 왼쪽 피연산자의 유형으로 캐스트됨을 의미하고 R은 그 반대를 의미하고 X는 내재적 캐스트가 발생하지 않음을 의미하고 공백은 두 데이터 유형 값 사이의 비교가 지원되지 않음을 의미합니다.
  ukn bln int float dec char time gtm date ts gts ivl blob bit
ukn                            
bln   X       L                
int     X R R L                
float     L X L L                
dec     L R X L                
chr   R R R R X R R R R R R1 R R
tm           L X L            
gtm           L R X            
dt           L     X R2 R2      
ts           L     L2 X L      
gts           L     L2 R X      
ivl           L1           X    
blb           L             X  
bit           L               X
주:
  1. 문자열에서 간격으로 캐스트할 때 문자열의 형식은 INTERVAL '<values>' <qualifier>이어야 합니다. 명확한 CAST에 대해 허용 가능한 형식 <values>는 문자열에 대한 외부 규정자가 제공되지 않기 때문에 여기에서는 허용되지 않습니다.
  2. DATE에서 TIMESTAMP 또는 GMTTIMESTAMP로 캐스트할 때 TIMESTAMP의 시간 부분은 모두 0 값으로 설정됩니다(00:00:00). 시간 부분이 현재 시간으로 설정되는 명시적 캐스트의 작동과는 다릅니다.

숫자 유형

비교 연산자는 세 개의 모든 숫자 유형에서 작동됩니다.

문자열

예를 들면, 대문자와 소문자를 동일하게 조합하는 대체 조합 순서를 정의할 수 없습니다.

문자열들을 비교할 때 후미 공백은 중요하지 않으므로 비교 'hello' = 'hello '는 true를 리턴합니다.

DateTime 값

DateTime 값은 그레고리안력과 시계의 일반 규칙에 따라 비교됩니다.

사용자가 작업 중인 시간대를 GMT 시간대와 비교할 수 있습니다. GMT 시간대는 현지 시간대와 지정된 GMT 시간대 사이의 차이에 기초하여 현지 시간대로 변환됩니다. 현지 시간을 GMT 시간과 비교할 때 주어진 날짜의 주어진 시간에서의 차이를 기초로 비교가 이루어집니다.

변환은 항상 LOCAL_TIMEZONE의 값에 기초합니다. 명확하게 수행할 수 있는 경우에만 GMT 시간 소인이 현지 시간 소인으로 변환되기 때문입니다. 현지 시간 소인을 GMT 시간 소인으로 변환하는 것은 일광 절약 시간 즈음에서는 어려움이 있으며 시간과 GMT 시간 사이의 변환(날짜 정보 없음)은 LOCAL_TIMEZONE 값에 기초하여 수행해야 합니다. 그렇지 않으면, 사용할 시간대 차이를 지정할 수 없기 때문입니다.

Boolean

Boolean 값들은 모든 정상 비교 연산자를 사용하여 비교할 수 있습니다. TRUE 값은 FALSE 값보다 크게 정의됩니다. 값을 UNKNOWN Boolean 값(널(null)과 동등함)과 비교하면 UNKNOWN 결과가 리턴됩니다.

간격

두 개의 간격 값을 중간 표현으로 변환하여 간격을 비교하면 두 간격의 간격 규정자가 동일해집니다. 연-월 간격은 다른 연-월 간격과만 비교할 수 있으며 일-초 간격은 다른 일-초 간격과만 비교할 수 있습니다.

예를 들면, INTERVAL '120' MINUTE와 같은 분 간격을 INTERVAL '0 02:01:00'과 같은 일-초 간격과 비교하는 경우 두 간격은 먼저 일치하는 간격 규정자를 가진 값으로 변환된 후에 비교할 수 있습니다. 따라서 이 예에서 첫 번째 값은 일-초 간격으로 변환할 수 있으며 이는 두 번째 값과 비교할 수 있는 INTERVAL '0 02:00:00'을 제공합니다.

문자열을 다른 유형과 비교

문자열을 다른 유형의 값과 비교하는 경우 WebSphere Message Broker는 문자열을 다른 값과 동일한 데이터 유형의 값으로 캐스트하려고 시도합니다.

예를 들면, 다음과 같은 표현식을 작성할 수 있습니다.
'1234' > 4567
비교가 발생하기 전에 왼쪽의 문자열은 정수로 변환됩니다. 이 작동으로 인해 일반 XML 메시지에서 도출된 값을 리터럴 값과 비교할 때 명확한 CAST 연산자의 필요성이 줄어듭니다(지원되는 명시적 캐스트에 대한 자세한 내용은 지원되는 캐스트 참조). 다음과 같은 표현식을 작성할 수 있도록 하는 것이 이 기능입니다.
Body.Trade.Quantity > 5000

이 예에서 왼쪽의 필드 참조는 문자열 '1000'으로 평가되며 정수와 비교되기 때문에 이 문자열은 비교가 이루어지기 전에 정수로 변환됩니다.

10진수로 해석하려는 가격 필드가 제공된 임계값보다 큰지 계속 점검해야 합니다. 이를 비교할 리터럴이 10진수 값이며 정수가 아닌지 확인하십시오.

예를 들면,
Body.Trade.Price > 100
Price 필드는 정수로 변환되기 때문에 원하는 결과가 얻어지지 않으며 문자열에 소수점이 포함되었기 때문에 변환은 실패합니다. 그러나 다음의 표현식은 성공합니다.
Body.Trade.Price > 100.00
관련 개념
ESQL 개요
관련 태스크
ESQL 개발
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ak05700_