오라클에선 잘되던 SYSDATE가 MyBatis에서 이상하게 나올때

서현서현·2022년 8월 26일
0

작은 실수들

목록 보기
13/19
 	<selectKey resultType="String" keyProperty="resvId" order="BEFORE" >
		SELECT 'RV'||replace(SYSDATE, '/', '')||'-'||(MAX(RSV) + 1)
		FROM(
		    SELECT COUNT(*) AS RSV
		    FROM (
		            SELECT TO_NUMBER(SUBSTR(RESV_ID, 12)) AS RSVI
		            FROM RESV
		            WHERE SUBSTR(RESV_ID, -10, 8) = replace(SYSDATE, '/', '')
		    )
		)
	</selectKey>

셀렉트키로 위 내용을 찾는데, 결과는 RV20220826-1 이런식으로 나와야한다.
근데 자꾸 년도의 20이 지맘대로 생략돼서 나옴 ㅜㅜ

이유는 정확힌 모르겠지만 삽질하며 추측하건데.... FROM때문일까 싶다 왜냐면 FROM DUAL로 하면 잘됨... 아닌가? 그냥 replace 옆에 || 이러고 다른 문자 넣으면 그런거같기도하고 혀튼 이유를 모르겠다

그래서 해결하려고 여러 방법을 시도한 끝에 찾은 해결법은 SYSDATE를 replace로 형변환 해주지 말고 TO_CHAR의 형식을 이용해서 넣어주는것!!

 	<selectKey resultType="String" keyProperty="resvId" order="BEFORE" >
		SELECT 'RV'||TO_CHAR(SYSDATE, 'YYYYMMDD')||'-'||(MAX(RSV) + 1)
		FROM(
		    SELECT COUNT(*) AS RSV
		    FROM (
		            SELECT TO_NUMBER(SUBSTR(RESV_ID, 12)) AS RSVI
		            FROM RESV
		            WHERE SUBSTR(RESV_ID, -10, 8) = TO_CHAR(SYSDATE, 'YYYYMMDD')
		    )
		)
	</selectKey>

이렇게 원하는 형태를 TO_CHAR를 이용하여 넣어주니 정상적으로 출력되었다

0개의 댓글