티스토리 뷰

728x90

아래와 같이 반복되는 값이 많으면, 우리는 변수를 사용하고 싶다. 현재 날짜가 세번이나 반복된다. 

SELECT 
   CASE
       WHEN ((SELECT COUNT(*) FROM TB_INFO I WHERE I.REGIST_DATE > DATE_FORMAT(NOW(), '%Y%m%d')) = 0)
           THEN  CONCAT(DATE_FORMAT(NOW(), '%Y%m%d'), '-', '0001')
       ELSE
           CONCAT(DATE_FORMAT(NOW(), '%Y%m%d'), '-', LPAD(NEXT_ID + 1, '4', '0'))
       END AS no
 FROM TB_KEY_GENERATE WHERE NAME = 'injeong';

mysql 변수 사용법은 간단하다. 아래처럼 사용하면 된다. 

@변수명:=값
 SELECT A.no FROM 
 	(SELECT
		@today:=DATE_FORMAT(NOW(), '%Y%m%d'),
       CASE
           WHEN ((SELECT COUNT(*) FROM TB_INFO I WHERE I.REGIST_DATE > @today) = 0)
               THEN  CONCAT(@today, '-', '0001')
           ELSE
               CONCAT(@today, '-', LPAD(NEXT_ID + 1, '4', '0'))
           END AS no
	FROM TB_KEY_GENERATE WHERE NAME = 'injeong') A;

근데 위의 문제점은 변수를 사용하기 위해서 일반쿼리가 서브쿼리로 변경되었다는 것이다.

블로그를 찾아봤을 때 이렇게 별도로 select 후 사용하는 방법 밖에 못찾았어서 그냥 원상복귀를 시켜야하나 고민하며 여러가지를 시도 해봤다. 그 중에 찾은게 바로 값을 할당할 수 있다는 것이었다.

아래처럼 값을 처음 사용 할 때 위의 방법대로 변수에 값을 할당해주었다.

@today:=DATE_FORMAT(NOW(), '%Y%m%d')
SELECT
   CASE
       WHEN ((SELECT COUNT(*) FROM TB_INFO I WHERE I.REGIST_DATE > @today:=DATE_FORMAT(NOW(), '%Y%m%d')) = 0)
           THEN  CONCAT(@today, '-', '0001')
       ELSE
           CONCAT(@today, '-', LPAD(NEXT_ID + 1, '4', '0'))
       END AS no
FROM TB_KEY_GENERATE WHERE name = 'injeong';

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함