1. ホーム
  2. データベース
  3. エムエスエル

SQLでのmod()関数の余りの使用法

2022-01-06 06:35:05

sqlのmod(a,b)はa / bの余り(つまりa % b)を意味します。

基本的な使い方:IDが偶数か奇数である必要がある場合、modを使うことができます。

mod(id,2)=1 は、id が奇数であることを意味します。

mod(id,2)=0 は id が偶数であることを意味します。

select mod(3,2) from dual

に示すように実行する。


例えば、社員のIDから男性か女性かを判断し、性別の更新を可能にする。
ID番号の17桁目、男性の場合は奇数、女性の場合は偶数
SEX CHAR(1) NOT NULL, --** 性別。1 男性、2 女性

UPDATE table_name SET 
SEX = (CASE WHEN mod(identifynumber[17],2) = '1' THEN '1' ELSE '2' end) 
WHERE condition;

上記は、CASE WHER文だけでなく、デコード機能も使用しています。(その DECODE関数の使用方法 )

例 テーブル1テーブル社員の性別、誕生日、年齢をID番号テーブル2に基づいて更新します。(以下は、Informixデータベースを使用しています)

update table1 set 
sex = (select sex 
         from table2  
        where table2.t_id = table1.t_id 
          and table2.t_no = table1.t_no),
birthday = (select substr(identifiynumber,7,8) 
              from table2         
             where table2.t_id = table1.t_id 
	           and table2.t_no = table1.t_no),
age = (select year(today) from dual) - ( select year( substr(identifiynumber,7,8) ) 
                                           from table2 
                                          where table2.t_id = table1.t_id
                                            and table2.t_no = table1.t_no)
where t_id = '';


[例】 MOD(63,8), MOD(120,10), MOD(15.5,3) に対して剰余演算を行う場合、入力SQL文と実行結果は以下のようになります。

mysql> SELECT MOD(63,8),MOD(120,10),MOD(15.5,3);
+-----------+-------------+-------------+
| MOD(63,8) | MOD(120,10) | MOD(15.5,3) |
+ -----------+-------------+-------------+
| 7 | 0 | 0.5 |
+-----------+-------------+-------------+
1 row in set (0.03 sec)

実行の結果、63÷8は7、120÷10は0、15.5÷3は0.5であることがわかります

今回の記事は、sqlのmod()関数を使って余りを求めるという内容です。sql mod()で余りを求めるについては、スクリプトハウスの過去記事を検索するか、引き続き以下の関連記事を閲覧してください。