[퀴즈] 한글이 저장된 컬럼을 일정 크기로 분할하기. 1 17 6,245

by 마농 퀴즈 substr substrb length [2009.05.12 16:11:26]


[퀴즈] 한글이 저장된 컬럼을 일정 크기로 분할하기.


다음은 오라클클럽의 상단에 표시되는 명언들중 일부입니다.
이 자료를 30Byte 단위로 잘라서 2개의 컬럼으로 분할하세요.
한글은 2Byte 기준입니다.
만약 한글이 29와 30번째 자리에 위치할 경우 29Byte까지가 첫번째 컬럼이 됩니다.
60Byte 이상의 자료는 없다고 가정하고 풀어보세요.

WITH t AS
(
SELECT '부드러운 빗방울은 굵은 대리석을 꿰뚫는다. -J.릴리-' cmt FROM dual
UNION ALL SELECT '지금 그것을 하지 않는다면 언제 할 수 있는 날이 있겠는가?' FROM dual
UNION ALL SELECT '열광하는 삶보다 한결같은 삶이 더 아름답다.' FROM dual
UNION ALL SELECT '평온한 바다는 결코 유능한 뱃사람을 만들 수 없다.' FROM dual
UNION ALL SELECT '인생은 실패해서 망하는게 아니라 포기할때 망하는 것이다.' FROM dual
)
SELECT * FROM t;

[결과]

CMT1 CMT2
부드러운 빗방울은 굵은 대리석 을 꿰뚫는다. -J.릴리-
지금 그것을 하지 않는다면 언제  할 수 있는 날이 있겠는가?
열광하는 삶보다 한결같은 삶이  더 아름답다.
평온한 바다는 결코 유능한 뱃사 람을 만들 수 없다.
인생은 실패해서 망하는게 아니 라 포기할때 망하는 것이다.

[정답보기] <== 트리플 클릭
SELECT SUBSTR(cmt, 1, LENGTH(SUBSTRB(cmt, 1, 31)) - 1) cmt1
     , SUBSTR(cmt, LENGTH(SUBSTRB(cmt, 1, 31))       ) cmt2
  FROM t
;

by 서성우 [2009.05.12 16:28:32]

WITH t AS
(
SELECT '부드러운 빗방울은 굵은 대리석을 꿰뚫는다. -J.릴리-' cmt FROM dual
UNION ALL SELECT '지금 그것을 하지 않는다면 언제 할 수 있는 날이 있겠는가?' FROM dual
UNION ALL SELECT '열광하는 삶보다 한결같은 삶이 더 아름답다.' FROM dual
UNION ALL SELECT '평온한 바다는 결코 유능한 뱃사람을 만들 수 없다.' FROM dual
UNION ALL SELECT '인생은 실패해서 망하는게 아니라 포기할때 망하는 것이다.' FROM dual
)
SELECT SubStrb(cmt,1, Decode(Length(SubStrb(cmt,29,2)),2,29,30)) cmt1,
SubStrb(cmt,Decode(Length(SubStrB(cmt,30,2)),2,31,30)) cmt2
FROM t;


by 마농 [2009.05.12 16:37:24]
서성우님. 약간의 문제가 있네요.
'열광하는 삶보다 한결같은 삶이 ', '더 아름답다.' 가 나와야 하는데
'열광하는 삶보다 한결같은 삶이', '더 아름답다.' 가 나오는군요.
공백이 하나 누락되었습니다.

by 호야 [2009.05.12 16:54:54]
SELECT SUBSTRB(CMT,1,30) CMT1,
SUBSTRB(CMT,DECODE(ASCII(SUBSTRB(CMT,30,2)),32,31,30)) CMT2
FROM TEMP

너무 막장 같애...ㅠ..ㅠ

by 서성우 [2009.05.12 17:00:35]
SELECT SubStrb(cmt,1, Decode(Length(SubStrb(cmt,29,2))||Length(SubStrB(cmt,30,2)),21,29,30)) cmt1,
SubStrb(cmt,Decode(Length(SubStrB(cmt,29,2))||Length(SubStrB(cmt,30,2)),21,30,31)) cmt2,
FROM t

by 마농 [2009.05.12 17:00:56]
호야님의 쿼리에도 문제가 있군요.
'부드러운 빗방울은 굵은 대리석', '을 꿰뚫는다. -J.릴리-' 가 나와야 하는데
'부드러운 빗방울은 굵은 대리석 ', '을 꿰뚫는다. -J.릴리-' 가 나오는군요.
공백이 하나 추가되었습니다.

by 호야 [2009.05.12 17:05:19]
SELECT SUBSTRB(CMT,1,DECODE(ASCII(SUBSTRB(CMT,29,2)),32,29,30)) CMT1
,SUBSTRB(CMT,DECODE(ASCII(SUBSTRB(CMT,30,2)),32,31,30)) CMT2
FROM T

-_- 더욱 막장으로 가는군요.ㅠ..ㅠ

by 마농 [2009.05.12 17:08:21]
호야님 분발하세요. 아직 안되네요.
'삶이' 다음에 공백이 누락되었어요.

by 호야 [2009.05.12 17:13:09]
으하하하 마농 형님 것두 찾았어요
'열광하는 삶보다 한결같은 삶이 ' 가 LENGTHB 가 30이 나오네요
'열광하는 삶보다 한결같은 삶이' 가 29 맞지 않나용^^

by 호야 [2009.05.12 17:14:29]
으아아아.ㅠ.ㅠ 아니구나.. 흑.. 뒤에 한칸이 있군요..웩.. 어떻게 해

by 호야 [2009.05.12 17:23:55]
SELECT SUBSTRB(CMT,1,DECODE(SUBSTRB(CMT,30,2),' ',30,29)) CMT1
,SUBSTRB(CMT,DECODE(SUBSTRB(CMT,30,2),' ',31,30)) CMT2
FROM T

함수 하나라도 줄여야지

by 마농 [2009.05.12 17:27:40]
호야님. 다른 방식으로 접근하셔야 할것 같아요.
'삶이 더' 부분을 '삶이A더' 라던가 '삶이+더'로 수정한다면 결과가 틀립니다.
특수문자나 알파벳도 물론 들어갑니다. '. -J.릴리-' 이부분을 보면 알 수 있죠.

by 호야 [2009.05.12 18:19:18]
SELECT SUBSTRB(CMT,1,DECODE(LENGTHB(RTRIM(SUBSTRB(CMT,30,2))),2,29,30)) CMT1
,SUBSTRB(CMT,DECODE(LENGTHB(RTRIM(SUBSTRB(CMT,30,2))),2,30,31)) CMT2
FROM T

-_- 포기 안 할껍니다.ㅠ.ㅠ.

by 마농 [2009.05.12 18:24:51]
호야님 화이팅입니다.~
더 분발하세요. 아직 부족하네요.
'열광하는 삶보다 한결같은 삶이...더 아름답다.' 로 테스트해보세요.

by 호야 [2009.05.12 18:32:33]
SELECT SUBSTRB(CMT,1,DECODE(LENGTH(RTRIM(SUBSTRB(CMT,30,2))),1,29,30)) CMT1
,SUBSTRB(CMT,DECODE(LENGTH(RTRIM(SUBSTRB(CMT,30,2))),1,30,31)) CMT2
FROM T

괜한 고집을 부렸네요.. 이렇게 끼워 맞추기 씩으로는 안되는데
풀다 보니 형님 답이 나와 버려서.ㅠ..ㅠ 킁

by 마농 [2009.05.13 08:29:16]
호야님.
'열광하는 삶보다 한결같은 삶이+ 더 아름답다.'는 잘못 나오네요.
RTRIM만 빼면 정답입니다.

by 호야 [2009.05.13 08:54:59]
공백 ??문에 너무 신경을 한쪽에다가..ㅠ.ㅠ

다음에는 더 잘 풀어 볼께요..^^

by Ejql [2009.05.13 10:19:13]
또 배우고 갑니다.
풀어보려고 했는데. substrb 라는것을 못찾아서.. 답을 보고 말았네요.

저도 제대로 된 답을 올릴때까지 열심히 공부할께요.

계속 퀴즈부탁드립니다. ^^; (시간이 되신다면 말입니다.~ )
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입