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 

 

DATEDIFF(Transact-SQL) - SQL Server

DATEDIFF 함수의 Transact-SQL 참조입니다. datepart를 기준으로 시작 날짜와 종료 날짜 사이의 숫자 차이를 반환합니다.

docs.microsoft.com

https://docs.microsoft.com/ko-kr/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15 

 

CAST 및 CONVERT(Transact-SQL) - SQL Server

CAST 및 CONVERT 함수의 Transact-SQL 참조입니다. 해당 함수는 특정 데이터 형식의 식을 다른 데이터 형식으로 변환합니다.

docs.microsoft.com

 

https://docs.microsoft.com/ko-kr/sql/t-sql/functions/round-transact-sql?view=sql-server-ver15 

 

ROUND(Transact-SQL) - SQL Server

ROUND(Transact-SQL)

docs.microsoft.com

 

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
Posted by 댕기사랑
,