[MyBatis] Data 포맷 변경하기

Yeoonnii·2022년 11월 11일
0

MyBatis

목록 보기
9/10

Data(날짜) 포맷 변경하기

// 날짜 포맷 변경 (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
  • YYYY: 년
  • MM: 월
  • DD: 일
  • HH24: 24시간
  • HH: 12시간
  • MI: 분
  • SS:초



boardMapper.xml

        <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 포맷이 적용 안되는 경우

TO_CHAR 함수 사용하고 나서도 Date 포맷이 적용되지 않는 경우
Date값을 리턴받는 변수의 타입이 String인지 확인해준다!

BoardMainDTO.java

아래와 같이 타입을 변경해준다
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
    
}



SQL문에서 데이터 포맷 변경하여 조회

날짜 데이터를 꺼내어서 변경하여 사용하는것 보다
데이터를 꺼내오는 시점에 날짜 변경을 진행하는 것이 좋다고 한다

쿼리문에서 조회하는 그 시점에 날짜 데이터를 변경하여 조회해야 하는데
SELECT을 진행할 때 SELECT * FROM으로 조회하는 경우 포맷한 날짜 컬럼과 기존 컬럼이 중복되어 나온다

컬럼명을 지정하여 명확히 조회하니 날짜 데이터 컬럼이 중복되지 않고 잘 변환되어 나온다

0개의 댓글