【Access】X日前が属する月の指定日以降のデータを出力する方法

MicrosoftのAccessクエリの備忘録です。

今回はDATESERIAL関数とFORMAT関数を利用します。

 

「日付のカラムがあるので今日から90日前に属する月の1日からデータを出力したい」

「日付のカラムがあるので今日から90日前に属する月の1日からデータを出力したい…けど文字列だ…」

というときに私はこの関数を応用して使います。

 

スポンサーリンク

この応用関数を利用するメリット

毎月自分で計算して日付を手打ちする必要がなくなります。

毎月xx日前の属する月から今日までのデータを出力したい、という計算を自動でしてくれるので便利です。

 

タイトルのやりたいことと記述方法

以下です。詳細補足はそのあとの見出しで以下

 利用例: 今日から180日前に属する月の1日以降のデータを全部出力したい

 計算方法:

  ① >=DATESERIAL(YEAR(DATE()-180),MONTH(DATE()-180),1)

  ② >=FORMAT(DATE()-180,”yyyy/mm/””01″””)

  ③>=FORMAT( DATESERIAL(YEAR(DATE()-180),MONTH(DATE()-180),1) ,”YYYY/MM/DD”)

 

補足:DATESERIAL関数

DATESERIAL関数の基本的な使い方

この関数は以下のように使います。

 

 基本形:DATESERIAL(年,月,日)

 利用例:2021年9月5日のデータを出力したい

 計算方法:DATESERIAL(2021,9,5)

 

DATESERIALのカッコ内の「年」「月」「日」それぞれに数字を入力することで日付として判断します。

例えば、2021年9月5日のデータを出力したいなら抽出したいデータをクエリに置き、日付のカラムをフィールドに置き、抽出条件に DATESERIAL(2021,9,5) と入力します。

 

DATESERIAL関数を応用した使い方

基本的な使い方のメリットはありません。

これなら直接抽出条件に 2021/9/5 と入力したほうがかんたんです(笑)

応用すること前提の関数ですね。

 

 利用例:今日から180日前に属する月の1日以降のデータを全部出力したい

    ただしデータのカラムは「日付/時刻型」だった

 計算方法:>=DATESERIAL(YEAR(DATE()-180),MONTH(DATE()-180),1)

 

YEAR関数は数字を年だけ、MONTH関数は数字を月だけに変換します。

「年」と「月」の数字の部分に本日日付を出力するDATE関数を代用し、遡りたい日数をそれぞれ減算すれば該当する年月が作成でき、あとは「1日」は固定なので、「日」に数字の1を入れれば計算できます。

 

補足:FORMAT関数

FORMAT関数の基本的な使い方

この関数は以下のように使います。

 

 基本形:FORMAT(変換前形,変換後形)

 利用例:2021/9/5を2021/09/05にしたい

 計算方法:FORMAT(2021/9/5,”yyyy/mm/dd”)

      ※変換後形の書式は文字列になる

 

FORMAT関数は色々利用手段があります。上記は月日が1桁表記なのを2桁表記にするものを例にしています。注意は変換したものの書式は文字列になります。

 

FORMAT関数を応用した使い方

FORMAT関数は文字列になってしまうので抽出条件を記述したいカラムのデータ型が「短いテキスト」の場合にはFORMAT関数を利用して文字列形式にしてしまうといいでしょう。

 

 利用例: 今日から180日前に属する月の1日以降のデータを全部出力したい 。

     ただしデータのカラムは「短いテキスト」(=文字列)だった

 計算方法:①>=FORMAT(date()-180,”yyyy/mm/””01″””)

       または

      ②>=FORMAT( DATESERIAL(YEAR(DATE()-180),MONTH(DATE()-180),1) ,”YYYY/MM/DD”)

 

DATESERIAL関数と同じく本日より指定の日数分遡るために、DATE関数と減算を利用します。FORMATの””のyやmの数は桁数です。年なら4桁か2桁、月なら2桁か1桁、文字列の形式に合わせて記載しましょう。

因みに、①で、なんで「”(ダブルコーテーション)」がこんなにつくのか不明ですが不足分はaccessが自動付与してくれます。記述は長くなりますが②のほうがスマートですね。

 

今回は以上です。

コメント

タイトルとURLをコピーしました