// 날짜 포맷 변경 (YYYY-MM-DD)
SELECT TO_CHAR(REGDATE, 'YYYYMMDD') -- 20220123
, TO_CHAR(REGDATE, 'YYYY/MM/DD') -- 2022/01/23
, TO_CHAR(REGDATE, 'YYYY-MM-DD') -- 2022-01-23
, TO_CHAR(REGDATE, 'YYYY-MM-DD HH24:MI:SS') -- 2022-01-23 01:23:45
FROM dual
<select id="boardSelectMain" parameterType="map" resultType="com.example.dto.BoardMainDTO">
SELECT * FROM
(SELECT M.NICKNAME, R.LIKECOUNT, RR.REPLYCOUNT, B.BNO, B.CONTENT, B.HIT, TO_CHAR(B.REGDATE, 'YYYY-MM-DD') REGDATE , B.TITLE, B.USERID, ROW_NUMBER() OVER (ORDER BY ${type} B.REGDATE DESC) ROWN FROM
(SELECT DISTINCT BNO
FROM HASHTAGMAPPING HM
<if test="hno != null">
WHERE HM.HNO IN (
<foreach collection="hno" item="tmp" separator = ", ">
#{tmp}
</foreach>
)
</if>
ORDER BY BNO DESC
) BM
INNER JOIN BOARD B ON BM.BNO = B.BNO
INNER JOIN MEMBER M ON M.USERID = B.USERID
INNER JOIN (SELECT BNO, COUNT(USERID) LIKECOUNT FROM LIKES GROUP BY BNO) R ON R.BNO = B.BNO
INNER JOIN (SELECT BNO, COUNT(RNO) REPLYCOUNT FROM REPLY GROUP BY BNO) RR ON RR.BNO = B.BNO
WHERE (B.TITLE LIKE '%' || #{title} || '%' OR B.CONTENT LIKE '%' || #{content} || '%')
)
WHERE ROWN BETWEEN #{page} AND #{page}+11 ORDER BY ROWN
</select>
TO_CHAR 함수 사용하고 나서도 Date 포맷이 적용되지 않는 경우
Date값을 리턴받는 변수의 타입이String
인지 확인해준다!
아래와 같이 타입을 변경해준다
Date regdate;
⇒String regdate;
import javax.persistence.Transient;
import lombok.Data;
@Data
public class BoardMainDTO {
Long bno ;
String title ;
String content ;
Long hit ;
String regdate ; // ==========> 포맷을 변경한 Date타입을 담기 위해 String 타입으로 변경
String nickname; //사용자 닉네임
int likecount; // 사용자의 좋아요 개수
int replycount; // 사용자의 댓글 개수
String imgurl; // 이미지 url
}
날짜 데이터를 꺼내어서 변경하여 사용하는것 보다
데이터를 꺼내오는 시점에 날짜 변경을 진행하는 것이 좋다고 한다
쿼리문에서 조회하는 그 시점에 날짜 데이터를 변경하여 조회해야 하는데
SELECT을 진행할 때 SELECT * FROM
으로 조회하는 경우 포맷한 날짜 컬럼과 기존 컬럼이 중복되어 나온다
컬럼명을 지정하여 명확히 조회하니 날짜 데이터 컬럼이 중복되지 않고 잘 변환되어 나온다