안녕하세요.
char형에대해 궁금한점이있어 여쭤봅니다.
char형의 경우 문자열 비교시 뒷자리에 스페이스를 채워 길이를 맞춘 다음 비교를 하다고 하는데...
'AA' = 'AA '
흔한 예인데,
궁금한점은 만약 특정 CHAR(8)의 형태라면...
1. 'AA' = 'AA ' 이 비교문에서 크기를 똑같이 맞춘다는건지,
아니면 8바이트를 기준으로 똑같이 맞추고 비교를 한다는건지 궁금합니다.
2. CHAR(8) = CHAR(10) 의 형태의 비교이면 앞쪽의 CHAR(8)을 뒤쪽에 CHAR(10)의 크기에 맞춰 스페이스로 채우고 비교를 하게되는건가요?
감사합니다.
CHAR(8) 이든 CHAR(800000)이든 STRING 비교시
IF 'AA' = 'AA (고 옹 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~백)' THEN
-> NOT EQUAL
IF 'AA' = TRIM('AA (고 옹 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~백)' THEN
-> EQUAL
처럼 TRIM 처리하셔서 비교해주시면 됩니다. 만약 CHAR(8)을 CHAR(800000) 에 맞춰서 출력하고 싶으실 경우 LPAD, RPAD 문으로 CHAR(8)을 CHAR(800000)에 알맞게 적절하게 빈공간을 채워주시면 될듯합니닷!!
WITH t AS ( SELECT CAST('AA' AS CHAR(8)) c8 , CAST('AA' AS CHAR(10)) c10 , CAST('AA' AS VARCHAR2(8)) vc8 FROM dual ) SELECT c8, c10, vc8 , CASE WHEN c8 = c10 THEN 1 ELSE 0 END b1 -- 1 , CASE WHEN c8 = vc8 THEN 1 ELSE 0 END b2 -- 0 , CASE WHEN c8 = 'AA' THEN 1 ELSE 0 END b3 -- 1 , CASE WHEN c8 = 'AA ' THEN 1 ELSE 0 END b4 -- 1 , CASE WHEN c8 = 'AA ' THEN 1 ELSE 0 END b5 -- 1 , CASE WHEN c8 = :v2 THEN 1 ELSE 0 END b6 -- 0 -- 'AA' 대입 , CASE WHEN c8 = :v8 THEN 1 ELSE 0 END b7 -- 1 -- 'AA ' 대입 , CASE WHEN c8 = :v10 THEN 1 ELSE 0 END b8 -- 0 -- 'AA ' 대입 , CASE WHEN c8 = CAST(:v2 AS CHAR(10)) THEN 1 ELSE 0 END b9 -- 1 FROM t ; C8 C10 VC8 B1 B2 B3 B4 B5 B6 B7 B8 B9 ------------------------------------------------ AA AA AA 1 0 1 1 1 0 1 0 1 -- CHAR 컬럼과 비교하는 값이 무언지에 따라 다르겟지요. -- 1. CHAR vs CHAR : 자리수와 관계없이 비교 성공. -- 2. CHAR vs VARCHAR2 : 공백 갯수까지 맞아야지만 성공. -- 3. CHAR vs 상수 : 자리수와 관계없이 비교 성공. -- 4. CHAR vs 변수 : 공백 갯수까지 맞아야지만 성공.