728x90
그분이 교육 전략을 잡기 위해서 직원들의 근속년수(년단위 소수점형태로 )을 달라고 하셨다. 그런데 자주사용하던 게 아니라 인터넷 서치해보니 datediff를 사용하면 된다고.. 생각해보면 날짜차이값 함수 찾고, 소수점 되는 방안 찾고, 1개 데이터 쿼리해보고, 전체 직원으로 조건 확대하는 순을 하면 될 것 같다.
1) 날짜 차이값함수 : datediff (함수 보기)
select DATEDIFF(year,getdate()-365,getdate()) as '1년전', DATEDIFF(year,getdate()-365-180,getdate()) as '1.5년전' |
그런데 소수점이 안되네. 이런 기준을 월로 바꾸어 보면
select DATEDIFF(month,getdate()-365,getdate()) as '1년전', DATEDIFF(month,getdate()-365-180,getdate()) as '1.5년전' |
이를 12개월로 나누면..
select DATEDIFF(month,getdate()-365,getdate())/12 as '1년전', DATEDIFF(month,getdate()-365-180,getdate())/12 as '1.5년전' |
앗 똑같네.
2) 소숫점 방안 : convert (함수 설명)
평소 하던 convert로 씌워주었더니
select convert(float,DATEDIFF(month,getdate()-365,getdate())/12) as '1년전', convert(float,DATEDIFF(month,getdate()-365-180,getdate())/12) as '1.5년전' |
왜 소수점이 아니지..!!😕😕😕😕😕😕😕😕😕😕😕
아 형변환후 나누면 ??
select convert(float,DATEDIFF(month,getdate()-365,getdate()))/12 as '1년전', convert(float,DATEDIFF(month,getdate()-365-180,getdate()))/12 as '1.5년전' |
참고로 int로 하면 결과 동일함
그런데 2년 직전 (즉 오늘 기준 20년 7월 12일)으로 보면 반올림해버리네 안되는데...
찾아보니 decimal이 낫다고 하시네
select convert(decimal,DATEDIFF(month,getdate()-365-360,getdate()))/12 as '2년 직전',convert(decimal,DATEDIFF(month,getdate()-365-324,getdate()))/12 as '1.9년전' |
아직 5일 남았는데 반올림 하네
3) 반올림 방지 및 버림 처리 (함수 설명)
4 ) 최종 쿼리
select avg(convert(decimal,DATEDIFF(month,reg_dt,getdate()))/12) as '평균근속년수' from employee (nolock) |
참조
https://docs.microsoft.com/KO-kr/sql/t-sql/functions/datediff-transact-sql?view=sql-server-ver15
https://docs.microsoft.com/ko-kr/sql/t-sql/functions/round-transact-sql?view=sql-server-ver15
728x90
'데이터엔지니어 > SQL' 카테고리의 다른 글
oracle 쿼리시 declare 사용해보기 (0) | 2023.08.23 |
---|---|
SQL쿼리-07조인 (0) | 2020.02.17 |
SQL 쿼리05-집계 (0) | 2020.02.16 |
SQL 쿼리04-데이터 조작 (0) | 2020.02.15 |
SQL 쿼리03-정렬 (0) | 2020.02.15 |