본문 바로가기
IT 자료

DB2 substr 사용하기

by 성곤 2015. 8. 20.
반응형


DB2 substr 사용하기


어느 DB이던 비슷비슷하겠지만, DB2에서 substring은 조금 특별하다.



substr(textData, 1, 20) 

textData 컬럼의 값이 한글일때, substr은 바이트기준으로 length를 자르기 때문에

'가나다라마가나다라마' 값이면 1 ~ 20은 한글은 3바이트'가나다라마바'로 6자리 하고 알 수 없는 2바이트값이 나온다.


이렇게 되면 'Transliteration failed, reason: invalid UTF8 data' 에러가 나올 수 있다.


그럼 substr(textData, 1, 24)로 수정하면 된다. (2 or 3 으로 나눠도 딱 떨어진다)

(물론, 이 방법은 무식한 방법이지만)



DB2 substring으로 한글과 영문 정확하게 원하는 만큼 자르고 싶다면

SUBSTRING(컬럼명,1, 10, CODEUNITS32)를 사용하면된다.



예시 ) ==============================================


SELECT SUBSTRING('안녕하세요반갑습니다',1,5, CODEUNITS32) FROM DUAL ;

SELECT SUBSTRING('abcd1234',1,5, CODEUNITS32) FROM DUAL ;


==============================================




SUBSTRING() 뒷부분에 CODEUNITS32를 넣어주면 된다.

CODEUNITS32를 붙여주면 한글이던 영문이던 같은 문자수로 값이 떨어진다.



뒷부분에 넣어주는 옵션으로는

CODEUNITS16 , CODEUNITS32 , OCTETS 가있는데, 각가의 설명은 하단을 참조하면된다.



=================================

내장 함수의 문자열 단위

특정 내장 함수에 대한 문자열 단위 지정 기능을 사용하여 "바이트 기반 방식"이 아닌 "문자 기반 방식"으로 문자열 데이터를 처리할 수 있습니다. 문자열 단위는 조작이 발생하는 길이를 판별합니다. 조작에 대한 문자열 단위로 CODEUNITS16, CODEUNITS32 또는 OCTETS를 지정할 수 있습니다.

CODEUNITS16
Unicode UTF-16이 조작의 단위임을 지정합니다. CODEUNITS16은 너비가 2바이트인 코드 단위로 응용프로그램이 데이터를 처리할 때 유용합니다. 첨부 문자로 알려진 일부 문자는 두 개의 UTF-16 코드 단위를 인코딩해야 합니다. 예를 들어, 악상 기호인 G 음자리표는 두 개의 UTF-16 코드 단위(UTF-16BE에서 X'D834'X'DD1E')를 필요로 합니다.
CODEUNITS32
Unicode UTF-32가 조작의 단위임을 지정합니다. CODEUNITS32는 단순한 고정 길이 형식의 데이터를 처리하며 데이터의 저장 형식(ASCII, UTF-8 또는 UTF-16)에 관계없이 동일한 응답을 리턴해야 하는 응용프로그램에 유용합니다.
OCTETS
바이트가 조작의 단위임을 지정합니다. OCTETS는 종종 응용프로그램에서 버퍼 공간 할당이 중요하거나 조작에 단순 바이트 처리가 필요할 때 사용됩니다.
=================================



출처 및 참고자료 : ibm knowledge center





반응형