반응형

날짜를 이용하여 주문번호를 생성하는 SQL문을 만들어보겠습니다.

 

SQL문

 

SQL문은 다음과 같이 작성합니다.

 

select concat(cast(d.receiptDate as char), right(concat("00000" , rowCount + 1),  6)) as receiptNo,
       count(e.cntNo) + 1 as cntNo, rowCount + 1 as rowCount
from tn_exp_hall as e, 
     (select concat(substr(date_format(now(), '%Y-%m-%d'), 1, 8)) as receiptDate,
     (select cntNo as cnt from tn_exp_hall order by cntNo desc limit 1) as rowCount FROM dual) d;

 

주문번호 생성 SQL문 분석

 

우선 SQL문에서 사용된 함수들은 다음과 같습니다.

 

concat : 문자열 결합

 

cast : 형변환

 

right : 문자열 자르기 * 오른쪽에서부터 입력한 숫자만큼 자름 -> right("안녕하세요", 3) => 결과 : 하세요.

 

count() : 괄호 안에 들어간 컬럼의 갯수 반환

 

substr : 문자열 자르기 * 문자열을 인덱스 단위로 자름

 

date_format() : 날짜 타입의 포맷 변환

 

 

위 SQL문에서 결과로 세 가지를 가져왔습니다.

 

첫번째, 생성한 주문번호

 

두번째, 총 데이터 갯수

 

세번째, Primary Key(기본키)의 마지막 값

 

 

주문번호 생성 과정

 

예제 날짜) 2021-10-05

 

 

1) 현재 날짜를 가져와서 문자열로 변환

결과 : 2021-10-05

 

2) 문자열로 변환한 현재 날짜 '년월일' 중에서 '일' 부분만 제거

결과 : 2021-10-

 

3) 지금 테이블에 있는 기본키 마지막 값을 가져옴 * 주의 : count()로 가져올 시 중간에 삭제된 데이터가 있을 경우 기본키 중복이 발생할 수 있습니다.

결과 : 현재 테이블에 있는 기본키의 마지막 값 * 여기에서는 37이라고 하겠습니다.

 

 

4) 가져온 기본키 마지막 값에 1을 더하고 앞에 문자열 '00000'을 결합

결과 : 0000037

 

5)  바로 위 '4)' 결과에서 오른쪽 6칸을 자름

결과 : 000037

 

6) '2)' 결과에 '5)' 결과를 결합

결과 : 2021-10-000037

 

 

실행결과

 

다음에 보이는 컬럼은 주문번호, 데이터 수, 마지막 기본키가 갖고 있는 값입니다.

 

반응형

+ Recent posts