강좌와 팁

[MSSQL] 선행제로 붙여 모델명 나열하기 날짜:2020-6-11 4:47:24 조회수:101
작성자 : 소엔
포인트 : 1403
가입일 : 2020-02-02 00:09:14
방문횟수 : 80
글 188개, 댓글 54개
소개 : SoEn 운영자입니다.
작성글 보기
쪽지 보내기
실무에서 제품명 여러 개에 대해 반복적인 쿼리를 실행해야 할 일이 생겼다.
예를 들어 다음과 같은 문장이다.

INSERT INTO table (name, price) VALUES ('Model-001', 1234);

Model-001부터 Model-100번까지 이름을 일일이 바꿔가며 쿼리문 실행하자니 너무 단순 반복 작업이었다.
일련 번호에 반드시 선행 제로가 있어야 한다는 점도 어렵다.
이럴 때는 루프를 돌리면 되는데 숫자를 선행 제로까지 포함해서 문자열로 바꾼 후 모델명에 덧 붙이면 된다.

DECLARE @num INT = 1;
DECLARE @name VARCHAR(50);
WHILE @num <= 100
BEGIN
 SET @name = 'Model-' + FORMAT(@num, 'D3');
 PRINT @name;
 SET @num += 1;
END;

@num을 1~100까지 순회하며 'Model-' 다음에 이 숫자를 덧 붙이되 반드시 세 자리로 맞춘다. 이를 위해 FORMAT 함수를 사용하고 서식으로 'D3'를 주면 된다. 또는 '000'으로 서식을 주어도 된다. 위 코드는 모델명이 제대로 만들어지만 출력해 보았다.

Model-001
Model-002
Model-003
Model-004
Model-005
....

아주 잘 만들어진다. 이렇게 만들어진 @name 변수를 INSERT INTO 쿼리문에 집어 넣으면 잘 삽입된다.
FORMAT 함수는 SQL 서버 2012부터 도입된 것이어서 그 이전 버전에서는 쓸 수 없다. 이럴 때는 RIGHT 함수를 사용하여 문자열 일부를 잘라 내면 된다.

SET @name = 'Model-' + RIGHT('00' + CAST(@num AS VARCHAR), 3);

'000'와 @num을 문자열로 바꾸어 연결한 후 오른쪽에서 세 문자를 취하면 된다.
이 간단한 코드 덕분에 단순 반복적인 작업을 편리하게 처리했다.



 



개발자의 천국 SoEn

목록보기 삭제 수정 신고 스크랩


로그인하셔야 댓글을 달 수 있습니다.