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
운영게시판
최근게시물
MS-SQL Q&A 7047 게시물 읽기
No. 7047
동적으로 생성된 COLUMN 들을 합칠수있나요?
작성자
김우성(babokws)
작성일
2017-04-17 13:22:07ⓒ
2017-04-17 13:23:30ⓜ
조회수
591

CREATE FUNCTION FUNCTIONS ( @CHANGE VARCHAR(40) )

RETURNS VARCHAR(40)

AS

BEGIN

DECLARE @CHANGE2 VARCHAR(40);

 

IF @CHANGE = 'E' SET @CHANGE2 = '';

ELSE IF @CHANGE = '0F' SET @CHANGE2 = '0';

ELSE IF @CHANGE = '10' SET @CHANGE2 = 'a';

ELSE IF @CHANGE = '12' SET @CHANGE2 = 'c';

ELSE IF @CHANGE = '13' SET @CHANGE2 = 'd';

ELSE IF @CHANGE = '27' SET @CHANGE2 = 'r';

 

RETURN @CHANGE2;

 

END;

 

Go

SELECT

dbo.FUNCTIONS(SUBSTRING(COLUMN,1,1))

+ dbo.FUNCTIONS(SUBSTRING(COLUMN,2,2))

+ dbo.FUNCTIONS(SUBSTRING(COLUMN,4,2))

+ dbo.FUNCTIONS(SUBSTRING(COLUMN,6,2))

+ dbo.FUNCTIONS(SUBSTRING(COLUMN,8,2))

FROM TABLE;

 

이렇게하니 10자리 이상되는 것들은 리턴하지 못하네요 그래서

 

SELECT

dbo.FUNCTIONS(SUBSTRING(COLUMN,1,1)) AS "A01"

, dbo.FUNCTIONS(SUBSTRING(COLUMN,2,2)) AS "B02"

, dbo.FUNCTIONS(SUBSTRING(COLUMN,4,2)) AS "C03"

, dbo.FUNCTIONS(SUBSTRING(COLUMN,6,2)) AS "D04"

, dbo.FUNCTIONS(SUBSTRING(COLUMN,8,2)) AS "E05"

FROM TABLE;

 

결과의 COLUMN (A01 + B02 + C03 + D04 + E05) 들을 합칠수 있나요?

예) "E0F10121327" -> " ", "0", "a", "c", "d", "r" 이렇게 나온값을 " 0acdr" 이렇게 하나의 COLUMN으로요

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

펑션을 여러번 호출하는게 아니라

펑션 호출은 한번만 하고

펑션 안에서 루프 구문 안에서 반복처리를 해야죠.

마농(manon94)님이 2017-04-17 13:35:01에 작성한 댓글입니다.

CREATE FUNCTION FUNCTIONS ( @CHANGE VARCHAR(40) )

RETURNS VARCHAR(40)

AS

BEGIN

DECLARE @CHANGE2 VARCHAR(40);

DECLARE @cnt INT = 0;

 

IF @CHANGE = 'E' SET @CHANGE2 = '';

ELSE IF @CHANGE = '0F' SET @CHANGE2 = '0';

ELSE IF @CHANGE = '10' SET @CHANGE2 = 'a';

ELSE IF @CHANGE = '12' SET @CHANGE2 = 'c';

ELSE IF @CHANGE = '13' SET @CHANGE2 = 'd';

ELSE IF @CHANGE = '27' SET @CHANGE2 = 'r';

 

WHILE @cnt < 1

BEGIN

SELECT @After = @Before FROM TABLE;

 

SET @cnt = @cnt + 1;

END;

 

RETURN @CHANGE2;

 

END;

 

Go

SELECT

dbo.FUNCTIONS(SUBSTRING(COLUMN,1,1))

+ dbo.FUNCTIONS(SUBSTRING(COLUMN,2,2))

+ dbo.FUNCTIONS(SUBSTRING(COLUMN,4,2))

+ dbo.FUNCTIONS(SUBSTRING(COLUMN,6,2))

+ dbo.FUNCTIONS(SUBSTRING(COLUMN,8,2))

FROM TABLE;

 

"E0F10121327" -> "E0F10121327" 이렇게 변환이 안되네요

쿼리문좀 올려주시면 안될까요?

김우성님이 2017-04-17 19:43:17에 작성한 댓글입니다. Edit

테스트 환경이 안되서 테스트는 못했습니다.


CREATE FUNCTION functions(@v VARCHAR(50))
RETURNS VARCHAR(50)
AS
BEGIN
  DECLARE @v1 VARCHAR(100);
  DECLARE @v2 VARCHAR(2);
  DECLARE @v3 VARCHAR(50);
  SET @v1 = REPLACE(@v, 'E', 'E ');
  SET @v2 = '';
  SET @v3 = '';
  WHILE LEN(@v1) > 0
  BEGIN
    SET @v2 = SUBSTRING(@v1, 1,  2);
    SET @v1 = SUBSTRING(@v1, 3, 99);
    IF      @v2 = 'E ' SET @v2 = ' ';
    ELSE IF @v2 = '0F' SET @v2 = '0';
    ELSE IF @v2 = '10' SET @v2 = 'a';
    ELSE IF @v2 = '12' SET @v2 = 'c';
    ELSE IF @v2 = '13' SET @v2 = 'd';
    ELSE IF @v2 = '27' SET @v2 = 'r';
    SET @v3 = CONCAT(@v3, @v2);
  END
  RETURN @v3
END;
Go


SELECT column
     , functions(column) AS Result
  FROM table
;

마농(manon94)님이 2017-04-17 22:05:38에 작성한 댓글입니다.

SET @v3 = @v3 + @v2;

이렇게 수정해서 해결했습니다

정말 감사합니다.수고하세요

 

김우성(babokws)님이 2017-04-18 00:02:42에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7053사용자 프로세스만 중지할 수 있습니다.
유닉스
2017-05-06
508
7049Merge문 질문입니다.
남현진
2017-04-25
562
7048계정 권한 질문
이경민
2017-04-18
489
7047동적으로 생성된 COLUMN 들을 합칠수있나요? [4]
김우성
2017-04-17
591
7046대입을 해서 한번에 값을 얻을수 있을까요? [5]
김우성
2017-04-11
626
7045[질문]dbcc tranceon Flag 관련
김상원
2017-04-07
527
7044높은값 가까운수, 낮은값 가까운수 찾기 [1]
둥둥이
2017-03-29
532
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2017 DSN, All rights reserved.
작업시간: 0.069초, 이곳 서비스는
	PostgreSQL v9.6.3으로 자료를 관리합니다