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
'IT 자료' 카테고리의 다른 글
이클립스 글꼴 (0) | 2015.09.03 |
---|---|
DB2 한글 length 확인하기 (0) | 2015.08.20 |
[FMWGEN][DB2 JDBC Driver]Transliteration failed, reason: invalid UTF8 data (0) | 2015.08.20 |
input text 한글로 입력 (0) | 2015.08.13 |
영문입력을 한글로 변환하기 (0) | 2015.08.13 |