MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで日付の差分を取得して給与を計算する方法

例えば、月の勤務日数(入社日 − 終了日)にあたる日付の差分を取得し、それをもとに給与を計算したいケースを考えてみましょう。日当が300円だとすれば、20日勤務した場合の給与は6,000円、27日なら8,100円となります。

ここでは、まずサンプル用のテーブルを作成します。

mysql> create table DemoTable
-> (
-> JoinDate date,
-> EndDate date,
-> Value int
-> );
Query OK, 0 rows affected (1.16 sec)

次に、insertコマンドを使ってテーブルにレコードを挿入します。

mysql> insert into DemoTable values('2019-01-01','2019-01-31',500);
Query OK, 1 row affected (0.37 sec)

mysql> insert into DemoTable values('2019-02-12','2019-02-25',900);
Query OK, 1 row affected (0.22 sec)

select文で、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

出力結果

上記のクエリを実行すると、以下のような出力が得られます。

+------------+-------------+-------+
| JoinDate | EndDate | Value |
+------------+-------------+-------+
| 2019-01-01 | 2019-01-31 | 500 |
| 2019-02-12 | 2019-02-25 | 900 |
+------------+-------------+-------+
2 rows in set (0.00 sec)

続いて、給与を計算するためのクエリを見ていきましょう。日付の差分を取得するには、DATEDIFF()関数を使用します。

mysql> select ABS(DATEDIFF(JoinDate,EndDate) * Value) AS Total from DemoTable;

出力結果

実行結果は以下の通りです。

+-------+
| Total |
+-------+
| 15000 |
| 11700 |
+-------+
2 rows in set (0.14 sec)

クエリのポイント解説

DATEDIFF(JoinDate, EndDate)は、2つの日付の差を日数として返す関数です。ただし、引数の順序によって結果が負の値になる場合があるため、ABS()関数で絶対値に変換しています。その日数にValue(日当)を掛けることで、対象期間の総給与を算出できます。

今回の例では、最初のレコードは「30日 × 500 = 15,000」、2番目のレコードは「13日 × 900 = 11,700」という計算になり、それぞれ正しい給与額が表示されていることがわかります。この手法を応用すれば、勤怠管理システムや給与計算処理など、期間ベースの金額計算にも簡単に組み込むことができます。

  1. MySQLで2つの日付の差を月単位で求める方法

    MySQLで2つの日付の差を「月」単位で計算したい場合、TIMESTAMPDIFF()関数を使うと簡単に求められます。さらにABS()関数を組み合わせることで、日付の順序に関係なく常に正の値(絶対値)として結果を取得できます。本記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。1. テーブルの作成まず、date型のカラムを2つ持つテーブルを作成しましょう。mysql> create table DemoTable    -> (    -> Date1 date

  2. MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?

    MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970     (