DB2다
CHARINDEX를 사용하려고 했지만, 우리의 DB2에는 왜 존재하지 않는 걸까... (내가 못 찾은걸까;)
어쨋든 DB2에서는 CHARINDEX 대신에 LOCATE 함수를 사용할 수 있다.
사용법은 CHARINDEX와 매우 흡사하다. (정확히 똑같다는 것은 아니다)
LOCATE의 사용법은 다음과 같습니다.
/* LOCATE ( search-string, source-string [, start, (CODEUNITS16, CODEUNITS32, or OCTETS)] ) */
/* CODEUNITS16 : 16-bit UTF-16 code units */
/* CODEUNITS32 : 32-bit UTF-32 code units */
/* OCTETS : bytes */
SELECT 1 AS ODR, LOCATE('1', 'ABCDE12345') AS VAL FROM SYSIBM.SYSDUMMY1
UNION SELECT 2 AS ODR, LOCATE('E', 'ABCDE12345') FROM SYSIBM.SYSDUMMY1
UNION SELECT 3 AS ODR, LOCATE('E', 'ABCDE12345', 3) FROM SYSIBM.SYSDUMMY1
UNION SELECT 4 AS ODR, LOCATE('E', 'ABCDE12345', 6) FROM SYSIBM.SYSDUMMY1
UNION SELECT 5 AS ODR, LOCATE('e', 'ABCDE12345') FROM SYSIBM.SYSDUMMY1
UNION SELECT 6 AS ODR, LOCATE('가', 'ABCDE12345가나다라') FROM SYSIBM.SYSDUMMY1
UNION SELECT 7 AS ODR, LOCATE('家', 'ABCDE12345가나다라家') FROM SYSIBM.SYSDUMMY1
UNION SELECT 8 AS ODR, LOCATE('家', 'ABCDE12345가나다라家', 1, CODEUNITS16) FROM SYSIBM.SYSDUMMY1
UNION SELECT 9 AS ODR, LOCATE('家', 'ABCDE12345가나다라家', 1, CODEUNITS32) FROM SYSIBM.SYSDUMMY1
UNION SELECT 10 AS ODR, LOCATE('家', 'ABCDE12345가나다라家', 1, OCTETS) FROM SYSIBM.SYSDUMMY1
ORDER BY ODR
LOCATE에서 한글 같은 경우는 정확히 11번째라는 값이 리턴되지만, 한자는 그렇지 않습니다.
한자와 같은 문자까지 고려한다면, 별도의 옵션으로 'CODEUNITS32'을 주는 것을 추천합니다.
DB2에서 'CODEUNITS32'은 (ASCII,
UTF-8 또는 UTF-16)에 관계없이 동일한 응답을 리턴해야 하는 경우에 유용하게 쓰입니다. LOCATE말고도 SUBSTRING에서도 쓰여요. DB2사 용하다보면 종종 봅니다.
출처 : http://www.ibm.com/support/knowledgecenter/ko/SSEPEK_12.0.0/sqlref/src/tpc/db2z_bif_locate.html
'IT 자료' 카테고리의 다른 글
sql 옆으로 출력(콤마,) (0) | 2016.12.16 |
---|---|
java http인지 https인지 확인하는 법 (0) | 2016.12.15 |
javascript callback (0) | 2016.11.22 |
DB2] LISTAGG 집계 함수 (0) | 2016.11.03 |
로컬 개발환경 tomcat ssl 설치 (0) | 2016.10.13 |