회사에서 월별 음력, 양력과 관련된 공지를 하게 되었고 기준 데이터가 어떤 데이터는 음력, 어떤 데이터는 양력을 사용하고 있는 상황이다.
MSSQL에 음력, 양력 데이터 등록시 변환을 하든 조회 시점에서 해당하는 레코드들을 조회하든 음력과 양력 사이에서 실시간 변환보단 매핑 테이블을 이용하여 조회할 경우 더 효율적이란 판단된다.
왜 CHAR(10)가 아닌 VARCHAR(10로 설계했느냐 묻는다면
어차피 CHAR(10)이든 VARCHAR(10)이든 차지하는 공간은 동일하기 때문이다.
MSSQL에서 VARCHAR 자료형의 경우 포인터 형태로 존재하므로 데이터 수정이 발생될 경우 성능저하가 발생할 수 있겠으나 이처럼 매핑 테이블인 경우 데이터는 불변이다.
또 반대로 데이터 유형 역시 YYYY-MM-DD 고정 자릿수 이므로 CHAR(10)로 설계해도 상관없다.
즉 VARCHAR이든 CHAR이든 마음대로 해도 된다.
주의할 점은 음력 데이터 중 1985-02-30처럼 2월 30일 데이터가 존재한다란 점이다.
이는 테이블 설계시 DATETIME을 사용할 수 없으므로 테이블 설계시 VARCHAR(10)로 설계해야 정상 반입 및 이용이 가능하다.
끝으로 실제 사용하는 예시
현재월을 기준으로 하려면 그냥 getdate()로 바꾸면 됨
SELECT DATEADD(day, -1,DATEADD(MONTH, 1,DATENAME(YEAR,getdate()) + DATENAME(month,getdate())+'01'))
첨부파일로 데이터까지 올리려다가....
다 쓰고 올리려 했더니 데이터 용량 때문에 못올림 ㅜㅜ
필요하신 분은 연락주시면 개별적으로 드리겠습니다.