四則演算
-
加算
フィールド1 + フィールド2 -
減算
フィールド1 - フィールド2 -
乗算
フィールド1 * フィールド2 -
除算
フィールド1 / フィールド2
端数処理
-
四捨五入
ROUND(フィールド1、小数桁数)
(例)結果を小数2桁で丸めたい場合ROUND(フィールド1,2)
-
切り捨て
TRUNC(フィールド1、小数桁数) -
切り上げ
CEIL(フィールド1)
型変換
-
文字列に変換
CHAR(フィールド1) -
ゼロ埋めの文字列に変換
DIGITS(フィールド1)
※元フィールドの桁数分、前0埋めされた結果を返します -
数値に変換
INT(フィールド1) -
実数に変換
DECIMAL(フィールド1,10,2)
※パラメータの2つ目に正数桁数、3つ目に小数桁数を入れます
フィールドを小数に型変換することで小数の結果が得られるようになります。
(例)フィールド:ABC(8桁)を型変換し、小数2桁で四捨五入ROUND((DECIMAL(フィールド1,8,2),2)
文字列の結合
-
文字列フィールド同士の結合
CONCAT(フィールド1,フィールド2) -
3つの文字列フィールドの結合
CONCAT(CONCAT(フィールド1,フィールド2),フィールド3)
(例)フィールド1とフィールド3の間にハイフンを入れて結合したい場合CONCAT(CONCAT(フィールド1, '-'), フィールド2)
-
数値フィールドと文字列フィールドの結合
CONCAT(数値フィールド,文字列フィールド)
※タイプが数値フィールドの場合、暗黙的にVARCHAR(可変長文字列)に変換されます
文字列の置換
-
文字列フィールドを置換
REPLACE(フィールド1,置換したい文字列,置換する文字列)
(例)2021-01-01を2021/01/01にしたい場合REPLACE('2021-01-01', '-', '/')
(例)フィールド1の項目内にある全角空白を全て削除REPLACE(フィールド1,' ',' ')
※フィールド1内の全角空白は全て消えてしまいますのでご注意ください。
(例)フィールド1の項目内にある全角空白が2回以上続いた場合に削除REGEXP_REPLACE(フィールド1,' {2,}',' ')
※後ろ半角空白は全て自動でTRIM(削除)される仕様となっております。
文字列の部分抽出
SUBSTR関数を使って、文字の部分抽出を行います。
■構文
SUBSTR(パラメータ1,パラメータ2,パラメータ3)
■パラメータ
パラメータ1:文字列フィールド、もしくは指定文字列
パラメータ2:抽出開始位置
パラメータ3:抽出文字数
(例1)文字列フィールドの2桁目を1文字抽出
SUBSTR(フィールド1,2,1)
(例2)指定文字列の1桁目を1文字抽出
SUBSTR('ABCDEFG',1,1)
(例3)数値フィールドを前0埋めの文字列に変換して、3桁目から2文字抽出
SUBSTR(DIGITS(フィールド1),3,2)
条件によって出力する値を変換
CASE関数を使って、条件による出力値を変換します。
■構文
CASE WHEN (条件式) THEN (条件にマッチングした時の値) ELSE (条件にマッチングしなかった時の値) END
(例1)フィールド1が'1'の場合に'○'、それ以外の場合に'×'を出力
CASE WHEN (フィールド1 = '1') THEN '○' ELSE '×' END
(例2)フィールド1が'1'の場合に'○'、2の場合に'△'、それ以外の場合に'×'を出力
CASE WHEN (フィールド1 = '1') THEN '○' WHEN (フィールド1 = '2') THEN '△' ELSE '×' END
(例3)フィールド1が'1'か'2'の場合に'○'、それ以外の場合に'×'を出力
CASE WHEN (フィールド1 IN ('1','2')) THEN '○' ELSE '×' END
(例4)フィールド1が'M'の場合にフィールド2に負号を付け、それ以外の場合フィールド2をそのまま出力
CASE WHEN (フィールド1 = 'M') THEN (フィールド2 * -1) ELSE フィールド2 END
(例5)(フィールド1 / フィールド2 )のゼロ除算回避
CASE WHEN (フィールド2 = 0) THEN (フィールド1) ELSE (フィールド1/フィールド2) END
※フィールド2が0の場合にフィールド1の値をそのまま出力、それ以外の場合(フィールド1 / フィールド2)の結果を出力
システム日付の取得
NOW()関数を使って、今日の日付を取得します。
■構文
NOW
(例)システム日付をYYYYMMDDで取得
replace(substr(cast(now()as char(26)),1,10),'-','')
※NOWはタイムスタンプ型(YYYY-MM-DD HH:MM:SS)であるため、CHAR型に変更後、年月日部分の10桁(YYYY-MM-DD)を抽出し、"-"を""に置換
月末日の取得
LAST_DAY()関数を使って、月の末日を取得します。
■構文
LAST_DAY
(例)年月(YYYYMM)の月末日をYYYYMMDDで取得
REPLACE(CHAR(LAST_DAY(DATE(TO_DATE(フィールド1 || '/01','YYYY/MM/DD')))),'-')
※元データが年月の場合、TO_DATEする前に'/01'で日付を追加します。
※LAST_DAYは日付型(YYYY-MM-DD)であるため、結果フィールドで使用する場合CHAR型に変更する必要があります。
※REPLACE関数を使用し(YYYY-MM-DD)から"-"を取り除きます。
前月または翌月の取得
ADD_MONTHS()関数を使って、前月または翌月を取得します。
■構文
ADD_MONTHS(フィールド, 減算/加算年月)
(例)年月(YYYYMM)の前月をYYYYMMDDで取得
REPLACE(CHAR(ADD_MONTHS(DATE(TO_DATE(フィールド1 || '/01','YYYY/MM/DD')),-1)),'-')
※元データが年月の場合、TO_DATEする前に'/01'で日付を追加します。
※前月を求めるため、ADD_MONTHS関数の第二引数として'-1'を指定しています。
翌月の場合は'+1'、前々月(2か月前)の場合は'-2'といった感じに使用します。
※ADD_MONTHSは日付型(YYYY-MM-DD)であるため、結果フィールドで使用する場合CHAR型に変更する必要があります。
※REPLACE関数を使用し(YYYY-MM-DD)から"-"を取り除きます。
ある日数を足した(引いた)日付の取得
+ DAY または - DAY 関数を使って、ある日数を足した日付または引いた日付を取得します。
■構文
+ フィールド DAY
- フィールド DAY
(例)とある年月日(YYYYMMDD)からある日数を足して、YYYYMMDDで取得
REPLACE(CHAR(DATE(TO_DATE(CAST(フィールド1 as char(8)), 'YYYY/MM/DD')) + フィールド2 DAY),'-')
※元データが数値型の場合、TO_DATEする前にCAST関数で文字型にします。
※ある日数(フィールド2)を足すため、DAYは'+'を指定しています。
足す場合は'+'、引く場合は'-'といった感じに使用します。
※日付型(YYYY-MM-DD)で計算しているため、結果フィールドで使用する場合CHAR型に変更する必要があります。
※REPLACE関数を使用し(YYYY-MM-DD)から"-"を取り除きます。
月の差分の取得
TIMESTAMPDIFF関数を使って、月の差分を取得します。
■構文
TIMESTAMPDIFF
(例)開始年月と終了年月の差分を取得
フィールド1の値:202102 ※タイプO
フィールド2の値:202212 ※タイプO
実行結果:23
TIMESTAMPDIFF(64,char(to_date(フィールド2 || '/01','YYYY/MM/DD') - to_date(フィールド1 || '/01','YYYY/MM/DD'))) + 1
TO_DATEで年月をタイムスタンプ型に直し、フィールド2からフィールド1を引き算して、TIMESTAMPDIFFで差分を取得。
※TIMESTAMPDIFFの第一パラメータである"64"は"月"という意味になります。
※元データが年月の場合、to_dateする前に'/01'で日付を追加する必要があります。
※元データがOタイプではない場合(SやAタイプの場合)、CASTをする必要があります。(CAST(フィールド1 as char(8))
★TIMESTAMPDIFFについての参考URL
https://www.ibm.com/docs/ja/db2-for-zos/11?topic=functions-timestampdiff
日数の差分の取得
DAYS関数を使って、日数の差分を取得します。
■構文
DAYS
(例)開始年月日と終了年月日の差分を取得
フィールド1の値:20220212 ※タイプS
フィールド2の値:20220415 ※タイプA
実行結果:62
days (to_date(CAST(フィールド2 as char(8)),'YYYY/MM/DD')) - days (to_date(CAST(フィールド1 as char(8)),'YYYY/MM/DD'))
TO_DATEで年月をタイムスタンプ型に直し、フィールド2からフィールド1を引き算して、DAYSで差分を取得。
※今回のサンプルは元データがSやAタイプであるため、CASTをしています。
【その他】
仕様的にDB2 for i で記載可能なSQLは全て使えるといったものとなっておりますので、上記以外の式をご利用いただく場合はDB2 for iの関数仕様書をご覧ください。
【DB2 for i SQL解説書(pdf)】
https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_73/db2/rbafzpdf.pdf
【DB2 for i SQL解説書(IBM Knowledge Center)】
https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_73/db2/rbafzch2func.htm
コメント
0件のコメント
サインインしてコメントを残してください。