oracle, postgresql 쿼리 mysql 쿼리로 변환 질문드립니다. 0 2 461

by haezle [SQL Query] [2021.02.26 11:06:36]


안녕하세요!

oracle , postgresql  쿼리를 mysql 쿼리로 변경하는도중 어려움을 느껴 질문드립니다.

 

postgresql

SELECT TMP_DATE.STATUS_DATE FROM(
				WITH RECURSIVE DUAL_TABLE AS(
	    			SELECT TO_DATE('202001', 'yyyymm') STATUS_DATE
	    
	    			UNION ALL
	    
	    			SELECT STATUS_DATE + 1
	    			from DUAL_TABLE
				)
				SELECT 
					TO_CHAR(STATUS_DATE, 'yyyymm') STATUS_DATE 
				FROM DUAL_TABLE
				limit TO_DATE('202008', 'yyyymm') - TO_DATE('202001', 'yyyymm') + 1
			) TMP_DATE
			group by TMP_DATE.STATUS_DATE
			order by TMP_DATE.STATUS_DATE;

 

oracle

SELECT STATUS_DATE
			FROM(
	 			SELECT 	DISTINCT TO_CHAR(TO_DATE('202001', 'yyyymm') + LEVEL - 1, 'yyyymm') STATUS_DATE 
				FROM DUAL 
				CONNECT BY LEVEL <= TO_DATE('202008', 'yyyymm') - TO_DATE('202001', 'yyyymm') + 1 
			)
			ORDER BY STATUS_DATE;

 

결과

202001
202002
202003
202004
202005
202006
202007
202008

 

제가 mysql 쿼리로 비슷하게 짜면 값이 null 로 나오거나 한줄만 나오는 일이있습니다. 해결방안에 도움을 주시면 감사하겠습니다 . (__)

 

또한 mysql 쿼리에서

SELECT DATE_FORMAT(STR_TO_DATE('202008', '%Y%m'),'%Y%m'); 

쿼리 실행시 202008로 잘 찍히고

SELECT DATE_FORMAT(DATE_ADD(STR_TO_DATE('202008','%Y%m'), interval - 1 Month ), '%Y%m'); 

쿼리 실행시 null값으로 반환되는데 이유를 알 수 있을까요? 

잘부탁드립니다.

by 마농 [2021.02.26 11:22:52]

1. 해당 쿼리가 동작하지 않는 이유는
 - 함수를 부분 부분 끊어서 실행해 보시면 알 수 있을 것 같습니다.
 - 첫번째 함수에서부터 결과가 이상하네요. STR_TO_DATE('202008','%Y%m') -> 2020-08-00
2. MySQL 버전이 어떻게 되나요?
 - WITH Recursive 구문이 지원되는 버전인지?

WITH RECURSIVE t AS
(
SELECT '202001' ym
 UNION ALL
SELECT DATE_FORMAT(CONCAT(ym, '01') + INTERVAL 1 MONTH, '%Y%m')
  FROM t
 WHERE ym < '202008'
)
SELECT * FROM t
;

 


by haezle [2021.02.26 13:00:11]

답변 정말 감사드립니다.

계속 테스트한결과 

      	WITH RECURSIVE DUAL_TABLE
			AS(
				SELECT  STR_TO_DATE( CONCAT('202001','01'),'%Y%m%d') AS STATUS_DATE
				
				UNION ALL
				
				SELECT DATE_ADD( STATUS_DATE, INTERVAL + 1 Month ) AS STATUS_DATE  
				FROM DUAL_TABLE
				WHERE STATUS_DATE < STR_TO_DATE( CONCAT('202008','01'),'%Y%m%d')
			)
			SELECT 
			    DATE_FORMAT(STATUS_DATE,'%Y%m')
			FROM DUAL_TABLE;

아래와 같이 sql문을 짰는대 간단하게 짜신거보고 감탄하였습니다.

답변 감사드립니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입