날짜를 이용하여 주문번호를 생성하는 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
실행결과
다음에 보이는 컬럼은 주문번호, 데이터 수, 마지막 기본키가 갖고 있는 값입니다.
'DataBase > MySQL, MariaDB' 카테고리의 다른 글
[MariaDB] GROUP BY, HAVING절 (0) | 2022.02.03 |
---|---|
[MariaDB] 중복 데이터 제거 DISTINCT (0) | 2022.02.03 |
[MariaDB, MariaDB] 테이블 생성 시 필수 컬럼 (1) | 2021.10.01 |
[MySQL, MariaDB] 뷰(View) 생성 (0) | 2021.07.09 |
[MySQL, MariaDB] CASCADE, RESTRICT 및 외래키 제약 (0) | 2021.07.08 |