小さい会社の1人SEの開発記というか奮戦記

  1. SQL Server
  2. 4507 view

時間外勤務計算用に30分単位で端数を切り捨てる【SQL Server】

勤務時間計算で「残業時間は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で割った余りを引けばできそうですよね。

少し考えてみます。

 

SQL Serverの最近記事

  1. SQL文で今日から7日前までを指定する

  2. CASE文でビューに分岐処理を実装する【SQL Server】

  3. 変更の保存が許可されていません【SQL Server】

  4. Select Into でテーブルを別のマシンにコピーする【SQL Server】

  5. IN句+サブクエリを使ってデーターを削除する【SQL Server】

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


お薦め書籍

最近の記事

  1. Access

    Accessの数値型ではまる・・・。
  2. Excel

    日本語をエンコードする【Excel VBA】
  3. Access

    クエリで日付から曜日を算出する。【Access】
  4. PCパーツ

    ASUS AMD Ryzen 4000 シリーズ搭載小型ベア…
  5. Microsoft365

    コンデジをTeamsのWebカメラに使う
  6. SQL Server

    SQL文で今日から7日前までを指定する