iT邦幫忙

0

MSSQL 算年資問題請教

  • 分享至 

  • xImage

您好:

如下語法,請問 日期從2022-09-01 開始
到 2024-08-31 ,應該滿2年 ?
還是要到2024-09-01 才算滿兩年

我目前是用 除以365
但若有閏月等 ,應該就不准了

請問前輩,大多用什麼方式來算年資

select ( DATEDIFF(DAY, '2022-09-01 00:00:00'  ,  '2024-08-30 23:59:59') ) /365.000 ,
       ( DATEDIFF(DAY, '2022-09-01 00:00:00'  ,  '2024-08-31 23:59:59') ) /365.000 ,
	   ( DATEDIFF(DAY, '2022-09-01 00:00:00'  ,  '2024-09-01 23:59:59') ) /365.000 

結果
2.1.9972602, 2.0000000, 2.0027397

謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0

一般來說,如果是依勞基法來計算,其還分成了曆年制及週年制。
曆年制就是依每年的01/01為結算週期。
大多數的大型企業或是員工很多的。都會用此計算。

週年制則是依你到職日開始計算年資,結算日也是你的到職日。

至於閏年的問題。也就是多了2/29號。一般基本是不考量其計算。
一切都是依結算日來統計你的年資。

看更多先前的回應...收起先前的回應...
noway iT邦研究生 1 級 ‧ 2024-07-30 13:12:28 檢舉

您好:
目前是要算周年制的
現在有想到用 除以12 來算
不知道這是否正確

select ( DATEDIFF(MONTH, '2022-09-01 00:00:00'  ,  '2024-07-30 23:59:59') ) /12.000 ,
       ( DATEDIFF(MONTH, '2022-09-01 00:00:00'  ,  '2024-08-31 23:59:59') ) /12.000 ,
	   ( DATEDIFF(MONTH, '2022-09-01 00:00:00'  ,  '2024-09-01 23:59:59') ) /12.000 
by2048 iT邦高手 1 級 ‧ 2024-07-30 13:50:00 檢舉

/12.000 結果會呈現小數
/12 結果是整數(是否滿週年,這個方式ok)
不過如遇有留職停薪的週期需要納入扣除(尤其是多次留停人員)

noway iT邦研究生 1 級 ‧ 2024-07-30 14:37:50 檢舉

您好:因為有想要去對照級距,所以 有小數點
留職停薪的週期 後序在想如何做

正常來說並不會這樣細算
大多數是結算日到了,年資+1而已。
而不是直接用天數來算。

但你有提到留職停薪。
這可能就得看公司來決定計算

一般正常的計算是,並不會被扣除年資。
另一種算法則是依復職日為結算日。

其本上來說,曆年制會用第一種。週年制比較常用第二種。

0
純真的人
iT邦大師 1 級 ‧ 2024-07-30 13:44:40

喔?!感覺跟我做的功能差不多
只是也是用MSSQL去算的

https://ithelp.ithome.com.tw/upload/images/20240730/200613696aAQW99MUm.png

0
WUcheap
iT邦研究生 5 級 ‧ 2024-07-30 13:57:27

單純滿年資的SQL

-- 宣告變數
DECLARE @myDate DATETIME
-- 指定日期變數
SET @myDate = '2010-10-10 00:00:00'

SELECT DATEDIFF(YEAR, @myDate , GETDATE()) -
CASE WHEN MONTH(@myDate) > MONTH( GETDATE())
OR (MONTH(@myDate) = MONTH(GETDATE()) AND DAY(@myDate) > DAY(GETDATE())  )
THEN 1 
ELSE 0
END
noway iT邦研究生 1 級 ‧ 2024-07-30 14:42:52 檢舉

您好:
CASE WHEN MONTH(@myDate) > MONTH( GETDATE() )
OR (MONTH(@myDate) = MONTH(GETDATE() ) AND DAY(@myDate) > DAY(GETDATE() )
)
這一段 ,是否

		CASE WHEN    MONTH(@myDate) > MONTH( GETDATE() )
				** OR ( (MONTH(@myDate) = MONTH(GETDATE()  ) AND DAY(@myDate) > DAY(GETDATE() )  )**
			  )
			THEN 1 
0
123098
iT邦見習生 ‧ 2024-11-21 12:05:05

@melon playground 如果您希望更精確地計算年資(考慮到閏年等因素),可以使用以下方法:
直接計算天數:可以計算從2022年9月1日到2024年8月31日的總天數,然後除以365(或366,如果包括閏年)。
使用日期函數:如果您使用計算機軟體(如Excel)或編程語言(如Python),可以利用日期函數來計算兩個日期之間的年數,這樣會自動考慮閏年。

我要發表回答

立即登入回答