今回は前回の続きで「時間付き日付列」を対象としてフィルタークエリの実例。
時間のフィルターについて
日付の場合「2024-10-19」というフォーマットでフィルターを作成したが、時間が入る場合「2024-10-19T00:00:00Z」というフォーマットで検索する。
この「T」と「Z」はそれぞれ以下の意味。
- T : 日付と時刻の区切り文字。
- Z : UTC基準であることを示す。※日本時間の場合は「Z」の代わりに「+09:00」と書く。
ここで「日付」だけのフィルターと「日付と時刻」でのフィルターとで異なる点は、「日付と時刻」でのフィルターはutcNow関数をそのまま使える(+9時間しなくてよい)点。
これは「Z」や「+09:00」といった文字列に「どのタイムゾーンの時間か?」という情報が含まれているので、これをSharePoint側がくみ取っていい感じにフィルターをかけてくれるため(と思われる)。
※詳しくは最後のおまけで。
例として以下2つのフィルター式は、同じ意味になる。
// 日本時間の10/19 午前0時 dateTime eq '2024-10-19T00:00:00+09:00' // UTC時間の10/18 午後3時 = 日本時間の10/19 午前0時 dateTime eq '2024-10-18T15:00:00Z'
フィルタークエリで使う関数と演算子
ここから実例。前回同様以下の関数や演算子と組み合わせてフィルターを作っていく。
演算子
演算子
- eq : イコール
- gt : より大きい
- ge : 以上
- le : 以下
- lt : 未満
- and : かつ
実例
今回は以下のタイムゾーンに設定したSharePointサイトにある、
以下のリストに対してフィルターをかけていく。
ただutcNow関数を使うとテストのタイミングが難しかったため、疑似的に日本時間の10/19 午前0時にutcNow関数を使用したとしてタイムスタンプ文字列を用意し、これでフィルターをかけていく。
今以前のデータを取得
式
dateTime le '@{utcNow()}' dateTime le '@{variables('日本時間の10月19日ちょうど')}' // サンプルのソース // 今を含めない場合はlt
結果
今より後のデータを取得
式
dateTime gt '@{utcNow()}' dateTime gt '@{variables('日本時間の10月19日ちょうど')}' // サンプルのソース // 今を含める場合はge
結果
今から12時間前以降 かつ 今以前のデータを取得
式
dateTime ge '@{addHours(utcNow(), -12)}' and dateTime le '@{utcNow()}' dateTime ge '@{addHours(variables('日本時間の10月19日ちょうど'), -12)}' and dateTime le '@{variables('日本時間の10月19日ちょうど')}' // サンプルのソース // 12時間前を含めない場合はgt, 今を含めない場合はlt にそれぞれ変更
結果
今から24時間後未満かつ今より後のデータを取得
式
dateTime gt '@{utcNow()}' and dateTime lt '@{addHours(utcNow(), 12)}' dateTime gt '@{variables('日本時間の10月19日ちょうど')}' and dateTime lt '@{addHours(variables('日本時間の10月19日ちょうど'), 12)}' // サンプルのソース
結果
ちょうど今のデータを取得 ※あまりやらない
式
dateTime eq '@{utcNow()}' dateTime eq '@{variables('日本時間の10月19日ちょうどをUTCで表したやつ')}' // サンプルのソース
結果
以降、以前、より後、未満、などなど日本語って難しい。。
関連記事
おまけ:SharePointがタイムゾーンの変換をいい感じにやってくれる理由
サイトのタイムゾーンを日本にして、
このようなリストを作る。
ここでタイムゾーンをUTCに変更すると、
時間がちょうど9時間戻る。
ということで、SharePoint側として「入力した時刻を、入力したタイミングのサイト設定のタイムゾーン時刻と認識して、保存している」と思われる。