일단 이번달의 시작일과 마지막날에 대한 음력날짜를 구해봤습니다
현재월 시작날 : select convert(char(6),getdate(),112) + '01'
현재월 마지막날 : select convert(char(8),dateadd(m,1,convert(char(6),getdate(),112) + '01') - 1,112)
양력음력 변환 함수를 통하여 음력에 해당하는 날짜 변환
현재월 음력 시작날 : select egsfood.fn_LunarToSolar(convert(char(6),getdate(),112) + '01',1)
현재월 음력 마지막날 : select egsfood.fn_LunarToSolar(convert(char(8),dateadd(m,1,convert(char(6),getdate(),112) + '01') - 1,112),1)
문제점 1
이상하게 음력기준 시작일과 마직날이 하루가 오차가 발생합니다
2015.03.01에 대한 음력 날짜는 2015.01.10 인데 위 결과값은 2015.01.11이 나옵니다
2015.03.31에 대한 음력 날짜는 2015.02.11 인데 위 결과값은 2015.02.12이 나옵니다
문제점 2
mbirth 컬럼 : smalldatetime
입력값
1974-12-11 00:00:00
1975-02-05 00:00:00
...........
Select * from table where mbirth(생일이) between 음력시작일 and 음력마지막날
이렇게 처리를 해야 하기는 할것같은데 년도가 다르기때문에 여기에서 어떻게 적용을 해줘야 할지 막연합니다 ㅠㅠ
고수님들께서 원인파악과 팁을 주신다면 정말 감사하겠습니다 ㅠㅠ
질문에 정확한 솔루션을 제공 못해서 좀 유감입니다만.
이런류의 문제들은 날짜테이블 하나 만들어두면 고민할 필요가 없습니다.
100년짜리 날짜테이블 하나 만들고 음력날짜 컬럼을 만들어두시면 고민 해결이네요.
100년이래봐야 36500라인밖에 안되고 몇메가 안됩니다.
제가 쓰는 날짜테이블은
날짜,음력,요일,공휴일여부,말초,성수기,월례회의,EXCEL,업무마감일,예약가능일,중국비자접수마감일,반기번호,분기번호,주번호,주번호_월,법정휴일,법정공휴일,약정휴일,격주번호,사주번호
이런 컬럼들로 이루어져 있습니다.
음력이 필요하면 음력컬럼에 조건 걸면 되구요.
"중국비자접수마감일"이라는 컬럼은
조금 복잡한 로직에 의해서 구해야 하는 날짜인데... 이 경우도 쿼리가 복잡해지는걸 막기 위해서 미리 계산해서 다 넣어버렸습니다.
그럼 인덱스도 걸 수 있고 여러모로 좋지요.