티스토리 뷰
현재 날짜를 기점으로 데이터가 삽입될 때마다 00001, 00002, 00003 씩 추가 되는 쿼리문이다.
쿼리문은 MySQL 기반으로 작성되었다.
해당 쿼리를 질의함으로서 다음에 사용되는 날짜별 시퀀스번호를 구할 수 있다.
만약 현재날짜를 기점으로 데이터가 없는 경우 00001부터 시작하고
30개의 데이터가 쌓였(00030)다고 가정하고, 그 다음날이 되면 00001부터 다시 시작된다.
쿼리 짜느라 이곳저곳에서 도움도 받고 고생좀했는데
역시.. 서브쿼리를 조금 더 깊게 배울 필요가 있어보인다.
SET @TODAYS = DATE_FORMAT(NOW(), '%y%m%d');
SELECT
CONCAT(@TODAYS, LPAD(IFNULL(MAX(SUBSTR(SEQ, -5)), 1), 5, '0')) AS SEQ2
FROM (
SELECT MAX(CAST(구매번호시퀀스컬럼 AS SIGNED))+1 AS SEQ FROM 구매정보테이블
) AA
WHERE AA.SEQ LIKE CONCAT(@TODAYS, '%')
구매번호시퀀스컬럼에 포함된 데이터는
21092900001
21092900002
21092900003
... 순차적으로 올라간다.
구매정보 테이블은 구매번호를 기점으로 데이터를 구분한다.
AI와 비슷하게 구매를 취소하더라도 다음 구매자는 +1 번호를 가지게 된다.
주의사항: 현재날짜보다 더 앞선 날짜(210930, 211001, 등) 정보가 있는 경우 MAX 함수에 문제가 발생하기 때문에 쿼리가 정상적으로 작동하지 않을 수 있음
개선하자!
댓글