database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
ㆍDB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DB2 Q&A 1360 게시물 읽기
No. 1360
컬럼연결
작성자
이삼봉
작성일
2007-06-05 10:25
조회수
9,658

안녕하세요

제가 SQL문을 이렇게 작성했습니다.


SELECT T1.Order_No,T1.Pummok_Cd, T1.Stl_Gangj_Cd, T1.Jepum_Size_Cd,

CASE WHEN T1.Bd_Cnt IS NULL THEN 0 ELSE T1.Bd_Cnt END ||

SUM(CASE WHEN T2.Bind_Cnt IS NULL THEN 0 ELSE T2.Bind_Cnt END) Bind_Cnt,

CHAR(T1.Stl_Len) Stl_Len, T1.Car_No, T1.Size_Id, T1.Stl_Gangj_Id

FROM (

SELECT A.Order_No, A.Pummok_Cd, A.Stl_Gangj_Cd, A.Jepum_Size_Cd, A.Bd_Cnt, A.Stl_Len, B.Car_No, C.Size_Id, D.Stl_Gangj_Id

FROM TEST.GDA1110T A, TEST.GDA1100T B, TEST.GSZ1060T C, TEST.GQB1010T D

WHERE A.Sang_Jisi_Ymd = B.Sang_Jisi_Ymd AND A.Saupjang_Gbn = B.SaupJang_Gbn

AND A.Sang_Jisi_Seq = B.Sang_Jisi_Seq AND A.Sang_Jisi_Sub_Seq = B.Sang_Jisi_Sub_Seq

AND A.Pummok_Cd = C.Pummok_Cd AND A.Jepum_Size_Cd = C.Prod_Cd

AND A.Stl_Gangj_Cd = D.Stl_Gangj_Cd AND A.Sang_Jisi_Ymd >= '20050228'

AND A.Sang_Jisi_Ymd <= '20050501' AND A.Order_No = '422005040376'

AND B.Car_No = '경북99아8171' AND B.Sang_Jisi_Fmt_Gbn IN ('D', 'E')

AND A.Jepum_Yd_Cd = 'H1' AND A.Saupjang_Gbn = 'I' ) T1 LEFT OUTER JOIN TEST.GDC1250T T2

ON T1.Order_No = T2.Job_Jisi_No AND T1.Pummok_Cd = T2.Pummok_Cd

AND T1.Stl_Gangj_Cd = T2.Stl_Gangj_Cd AND T1.Jepum_Size_Cd = T2.Jepum_Size_Cd

AND T1.Stl_Len = T2.Stl_Len

GROUP BY T1.Order_No, T1.Pummok_Cd, T1.Stl_Gangj_Cd, T1.Jepum_Size_Cd, T1.Bd_Cnt, T1.Stl_Len, T1.Car_No, T1.Size_Id, T1.Stl_Gangj_Id


헌데 [DB2] SQL0171N The data type, length or value of argument "00000001" of routine "||" is incorrect. SQLSTATE=42815 이런 에러 메시지가 나오는데 이유를 못 찾겠습니다.

아시는 분 좀 부탁드릴께요

이 글에 대한 댓글이 총 4건 있습니다.

...
CASE WHEN T1.Bd_Cnt IS NULL THEN 0 ELSE T1.Bd_Cnt END ||
SUM(CASE WHEN T2.Bind_Cnt IS NULL THEN 0 ELSE T2.Bind_Cnt END) Bind_Cnt,
...

'||' 앞,뒤가 숫자이므로 '||' 는 사용 불가입니다.
혹시 앞,뒤 숫자를 더하시려면 '||' 대신 '+' 로 바꾸세여.

메세지내용은 '||' 의 1번 매개변수의 형식이나,길이,값이 맞지 않다라는 뜻같음.
'||' 앞,뒤에는 문자가 와야됨.

박진복(pjb708)님이 2007-06-05 16:58에 작성한 댓글입니다.

답글 감사합니다. ^^

헌데 제가 CASE WHEN T1.Bd_Cnt IS NULL 0 ELSE T1.Bd_Cnt END || SUM(CASE WHEN T2.Bind_Cnt IS NULL THEN 0 ELSE T2.Bind_Cnt END) 이 문장을 

CHAR을 이용하여 문자형식으로 변환을 하려고 하니 에러가 생겨서 HEX를 이용하여 문자형식으로 변환을 하였습니다.
HEX(CASE WHEN T1.Bd_Cnt IS NULL 0 ELSE T1.Bd_Cnt END) || HEX(SUM(CASE WHEN T2.Bind_Cnt IS NULL THEN 0 ELSE T2.Bind_Cnt END)) 이런식으로요

그랬더니 결과가 0000000100000002 이렇게 나옵니다.
앞에 0을 제거 한 결과가 나오는 방법은 없나요?? 

제가 원하는 결과는 '1/2' 이렇게 나오게 하는 것이거든요 ^^
부탁 드리겠습니다.

이삼봉님이 2007-06-06 10:09에 작성한 댓글입니다. Edit

V9이거나 z/OS V7이상이면 STRIP 함수 사용하세요.


STRIP('001020300',L,'0') ---> '1020300'  : 앞의 '0' 제거


STRIP('001020300',T,'0') ---> '0010203'  : 뒤의 '0' 제거


STRIP('001020300',B,'0') ---> '10203' : 앞,뒤의 '0' 제거


'0' 대신 다른문자도가능 : STRIP('XXXABCDXXX',L,'X') ---> 'ABCDXXX'  ...


그리고 HEX를 사용하면 안될것입니다.

10이하는 제데로 나오지만 10 이상일경우 '000A','000B'... 이렇게나옵니다. 

연결방법은 DB2.NET에 올린게있습니다. 참고하세요.

박진복(pjb708)님이 2007-06-07 13:33에 작성한 댓글입니다.
이 댓글은 2007-06-07 15:08에 마지막으로 수정되었습니다.

TRANSLATE,TRIM 함수를 쓰면 될것 같네용.

보통 DEC형식을 CHAR타입으로 변형시에는 좀 까다로운 면이 있습니다.

예를 들어 decimal(10,3)으로 선언된 컬럼에서 700.70을 인서트해서

select를 char형식으로 하게되면  0000700.700  보이겠죵.

물론 v9에서 STRIP함수를 제공하지만 그이하에서는 가공을 하셔야 합니다.

TRANSLATE(RTRIM(LTRIM(TRANSLATE(CHAR(A1), ' ', '0'))),'0',' ')

으로 변형을 하게되면 700.7 이라는 결과를 얻으실 수 있습니다.

위와 유사하게 변형을 하시면 될 듯 합니당.

성창번님이 2007-06-08 15:40에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1363Insert 작업시 시스템 날짜을 넣고 싶은데 안되네요?? [1]
초보자
2007-06-20
8971
1362쿼리를 실행하는 영역에 따라서 결과값이 다르게 나옵니다. [1]
이준식
2007-06-14
8664
1361INSERT, UPDATE 문에 사용하는 WITH UR의 의미? [4]
이준식
2007-06-08
9791
1360컬럼연결 [4]
이삼봉
2007-06-05
9658
1359IBM DB2 Data Provider for .NET Framework 2.0 이거 어디서 다운받나요
도데체
2007-06-01
8307
1357Solaris 장비에서 ODBC(CLI)를 이용한 프로그램 컴파일...
김재호
2007-05-28
7512
1356Toad for DB2 [1]
이상우
2007-05-28
9974
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다