Uipath select文で日付比較
日付の処理はよく行いますが忘れがちなのと、初めてselect文の中で使う機会があったので備忘録として残しておきます。
処理当日の日付を取得してファイル名に入れたりするシーンは結構多く、ただ日付を出力したい時は下記のように書きます。
Now.toString("yyyyMMdd")
これはString型にしてフォーマットを指定する方法なので、今回みたいにselect文の中で日付の比較をしたい時には文字列だと比較ができないですから使えません。
やりたいこと
データテーブルの日付が先月のデータだけで絞り込みたいとします。
こんなデータだとします
new DateTime
そこでDateTime型で日付の情報を取得したいので、「new DateTime」を使用します。
new DateTime(第一引数, 第二引数, 第三引数)
第一引数:対象年
第二引数:対象月
第三引数:対象日
それぞれを指定することでDatetime型の日付データにすることが出来ます。
先月1日の求め方
今回は先月1日が知りたいので、下記のように引数を渡します。
対象年 → Now.Year
対象月 → Now.Month -1 ※今月からマイナス1ヶ月で先月になります。
対象日 → 月初なので直接「1」を指定
DateTime型の変数を用意して、右辺に下記を代入する
new DateTime(Now.Year, Now.Month -1, 1)
これでDateTime型で先月1日の値を取得することが出来ます。
先月末の求め方
この場合は「今月1日の1日前」と考えて式を書きます。
new DateTime(Now.Year, Now.Month, 1)
これで今月1日ですね。
ここから1日引けばいいので、
new DateTime(Now.Year, Now.Month, 1).AddDays(-1)
これで先月末が求められます。
Add.Days()
Add.Months()
Add.Years()
このあたり本当によく使います。
本題
下準備ができたので、select文で先月1日~先月末までで絞り込みをしてみたいと思います。
※先月1日は「先月初」、先月末は「先月末」というDateTime型の変数にそれぞれ代入しているものとします。
DataTable.select("Convert([日付],System.DateTime) >= '"+ 先月初.toString +"' and Convert([日付],System.DateTime) <= '"+ 先月末.toString +"'").CopyToDataTable
select文の中でデータテーブルの日付の列をDataTime型に変換するため、「Convert」を使用しています。
Convert([列ヘッダー],変換したいデータ型)
まとめ
「new DateTime」を使ってDateTime型の日付データを求めてから、select文では日付の列をDateTime型に「Convert」して比較すると上手くいきます。
日付の列データ内にDateTime型に変換できないような欠損値があると、上手くConvert出来なかったので先に欠損値は排除してからselect文で絞り込むと良いです。
今回のようなケースであれば「データテーブルをフィルター」でも同様のことは出来ると思いますが、select文を使うようにしてます。
アクティビティを駆使するのも良いですが、select文が使えた方がデータ操作が幅広く可能になってなにかと便利そうだから(イメージ)です。
select文を使って、DataRow型の配列にするケースとも最近出会ったので、次はその記事書こうと思います。
以上です。
Discussion
非常に参考になる記事をありがとうございます。
UiPathについて折り入って相談させて頂きたいことがございます。
大変恐縮ですが ki@dynagon.jp 宛にメールをいただけますと大変喜びます。
何卒よろしくお願いいたします。