데이터를 읽을 때 trim 해서 저장해도 space 가 여러개 붙어서 저장되는 문제 0 3 2,063

by 배움 [SQL Query] [2022.12.09 14:32:57]


너무 초보라서 질문 드리기 부끄럽지만 꼭 배우고 싶어서 문의 드립니다.

TRIM 함수를 사용해도 지워지지 않는 space 는 어떻게 처리하는지 궁금해서 질문드립니다.

제가 Source 테이블에서 다수의 User ID 를 읽어오는데요.

읽어와서 ID가 같은 것끼리 mapping 을 해주려고 하니 숫자로 된 ID 의 "뒤에" space 가 12개씩 붙어 있는 레코드가 있습니다.

1. TRIM(USER_ID) 했더니 95% 가량의 레코드는 space 가 지워졌습니다.

2. 그런데 여전히 12개의 space 가 숫자 뒤에 붙어 있는 레코드가 남아 있어서 space 의 개수를 세어보니 12개예요.

3. 12개의 space 를 없애서 저장하기 위해 Replace 함수를 썼는데요.

select USER_ID, REPLACE(TRIM(USER_ID),'            ','') AS USER_ID

 

여기서 질문이 있습니다.

1. 만일 계속 남아 있어서 나중에 Replace 함수로 처리한 character 가 space 라면, 왜 Space 한칸에 대해 아래와 같이 Replace 함수를 실행하더라도 계속 12개의 space 가 남아 있는지 모르겠습니다.

select USER_ID, REPLACE(TRIM(USER_ID),' ','') AS USER_ID

 

2. 혹시나 하는 마음에 12개의 space 를 그대로 넣어서 이렇게 처리하니 모든 레코드가 정상적으로 space 없이 저장되었습니다.

select USER_ID, REPLACE(TRIM(USER_ID),'            ','') AS USER_ID

 

3. 제가 생각하는대로 숫자 뒤에 붙은 것이 space 가 맞을까요? 

만일 space 라면 제가 적용한 것처럼 12개의 space 를 넣어야만 처리가 될까요?

space 인지 아니면 tab 인지 어떻게 알 수 있을까요?

값을 복사해서 SQL Developer 의 worksheet 에 붙여 넣고 커서를 움직이면 한칸씩 이동합니다.

 

 

by Hinori_ [2022.12.09 15:00:47]

데이터형식이 char, nchar일것같은 느낌..


by 우주민 [2022.12.09 15:32:19]

생각해보니 아마 스페이스 대신 빈칸으로 보이는 전각문자가 들어가 있을 수도 있어보이네요.

trim으로 삭제되지 않은 문자 하나를 카피 해서 ASCII('카피한 문자') 형태로 아스키 코드값을 확인해보심이 어떨까요?

(참고로 스페이스의 아스키코드 값은 32)


by 배움 [2022.12.09 23:32:28]

의견 고맙습니다. 저도 이 문자의 ascii code 값을 알고 싶은데 copy 해서 hex editor 에 넣으니 C2 A0 라고 나오네요.

Character name NO-BREAK SPACE
Hex code point 00A0
Decimal code point 160
Hex UTF-8 bytes C2 A0
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입