勤務時間計算で「残業時間は30分単位計上、端数は切り捨て」というロジックが良くあるのでは無いでしょうか。今回は Getdate の結果を30分単位に丸める計算手段をまとめます。
やりたいこと
Getdate の結果を30分単位に変換します。計算イメージは以下の通り
Getdate | 変換結果 |
---|---|
17:35:01 | 17:30:00 |
17:50:23 | 17:30:00 |
18:05:45 | 18:00:00 |
18:20:56 | 18:00:00 |
18:35:01 | 18:30:00 |
文字型で変換
分を数値にして30未満であれば ‘:00:00’を文字列で追加、30以上であれば’:30:00’を追加すればできます。
CASE
WHEN Format(Getdate(),’mm’)<’30’ THEN
Format(Getdate(),’yyyy/MM/dd HH’) + ‘:00:00’
ELSE
Format(Getdate(),’yyyy/MM/dd HH’) + ‘:30:00’
END AS 変換結果
実際にUpdate文やInsert文のSQLを発行する場合はこれで充分ですよね。
Getdate()をDatetime型のカラム名称に変更すればどの様なパターンにも対応できます。
日付時間型で計算
計算でできそうな気もしますよね。30/(24*60)で小数点以下を切り捨てて(24*60)/30を掛けるとか、
分単位で30で割った余りを引けばできそうですよね。
少し考えてみます。
この記事へのコメントはありません。