char 형의 문자열 비교... 0 6 1,835

by 기그스 [2015.02.10 05:39:01]


안녕하세요.

char형에대해 궁금한점이있어 여쭤봅니다.

char형의 경우 문자열 비교시 뒷자리에 스페이스를 채워 길이를 맞춘 다음 비교를 하다고 하는데...

'AA' = 'AA   '

흔한 예인데,

궁금한점은 만약 특정 CHAR(8)의 형태라면...

1. 'AA' = 'AA   ' 이 비교문에서 크기를 똑같이 맞춘다는건지,

   아니면 8바이트를 기준으로 똑같이 맞추고 비교를 한다는건지 궁금합니다.

2. CHAR(8) = CHAR(10) 의 형태의 비교이면 앞쪽의 CHAR(8)을 뒤쪽에 CHAR(10)의 크기에 맞춰 스페이스로 채우고 비교를 하게되는건가요?

감사합니다.

by 김태원 [2015.02.10 10:27:25]

뒤쪽 CHAR(10)의 칼럼에 10자리를 모두 사용하는 데이터가 존재한다면 앞에 CHAR(8)을 두자리 늘려주는게 맞을것 같습니다...

하지만 그렇게 되면 또 CHAR(8)이 인덱스가 걸려있는 경우 그 인덱스 사용에 제약을 받을것 같기도 하고...

보통은 CHAR(8) = TRIM(CHAR(10)) 이런 형태로 사용하지 않나요? ^^?


by 기그스 [2015.02.11 17:58:30]

김태원님 감사합니다.

예 보통 그렇게 사용했는데...

char 공부중 길이를 맞춘후 비교한다는 글을 보고 궁금증이 생겼습니다.

감사합니다.


by 롤초보 [2015.02.10 11:12:08]

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)에 알맞게 적절하게 빈공간을 채워주시면 될듯합니닷!!

 


by 기그스 [2015.02.11 17:59:04]

롤초보님 감사합니다.

TRIM 처리 활용 감사합니다.


by 마농 [2015.02.10 12:37:46]
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 변수 : 공백 갯수까지 맞아야지만 성공.

 


by 기그스 [2015.02.11 17:59:54]

마농님 감사합니다.

예시 별로 테스트를 해보니 느끼는 바가 있었습니다.

감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입