いいね!数

0

閲覧数
2937

こんにちは。

更新日付が3年以内の文書を表示するビューを作成したいのですが、ビューの選択式に以下の式を追加しました。

SELECT Form = "XXX_Form" & 更新日付 >= @Adjust(@Today ; -3; 0; 0; 0; 0; 0)

結果、何も表示されませんでした。

フォーム上の更新日付フィールドが数値になっており、数値と日付で比較しようとしているためかなと思います。

更新日付は、基幹システムよりデータを引っぱってきている関係で数値になっています。

更新日付が日付型でないデータで、更新日付が3年以内の文書を表示するビューを作成したい場合、

どうすれば良いでしょうか。アドバイスを頂けると嬉しいです。

よろしくお願い致します。

 

サーバー情報: | クライアント情報: | 
カテゴリ:アプリ開発 - Notes アプリ | タグ:
  | 質問日時:2016/07/20 18:09:04

回答・コメント

いいね!数

0

こんにちは。

「更新日付は数値」と書いてありますが、どういう数値なのでしょうか。

"20160720"という数値なのか、ある基準日を0としてそこから経過した日数や秒数を数値で表してるのかで答えが変わってきます。

まぁどちらにしろ、[更新日付]というフィールドに格納されている数値と@Adjust()が返す時間形式のデータは直接は比較のしようがないという推測は正しいと思います。それなら、@Adjust()が返す時間形式を比較可能な数値に変換すればすみますね。

ただ、ビューの選択式で時間の計算をするのはちょっとイヤですねぇ。

ビューの選択式は文書数分繰り返すので、処理が重くなる上に「今日の日付を数値に変換」という同じ結果しか出ない計算を延々繰り返すことになります。さらに、ビューの更新タイミングで何度も実行されることになり、あまりエレガントではありません。

ここは発想を変えて、文書に「3年経過済フラグ」フィールドを用意するというのはどうでしょう。

[更新日付]から3年経過した時点で、このフィールドを"1"に設定します。文書保存時に""(空文字)に戻すようにしておけばいいでしょう。ビューの選択式にはこの「3年経過済フラグ」で判断するようにします。

後 は、サーバエージェントで定期的に文書をなめて、[更新日付]から3年経過したか判定して、このフィールドを"1"にセットします。もちろん[更新日付] で古い順にソートしたビューを用意し、更新から3年経過してない文書が出てきた時点で処理をやめれば、必要最小限の文書をなめるだけですみます。

/Yac

回答日時:2016/07/20 22:30:05

いいね!数

0

Emilie様

基幹システムよりデータを引っぱってきているということですが、
この時に日付変換してあげれば良いのではないでしょうか?
[更新日付]フィールドの値を変更してはならないのであれば、変換用のフィールドを配置すれば良いかと思います。

その変換用のフィールドと比較してあげるビュー式に変更してはいかがでしょうか?


mak

回答日時:2016/07/21 9:11:09

いいね!数

0

yac4423様

ご返答頂きましてありがとうございました。

また、詳しい情報が不足しており、申し訳ありませんでした。

更新日付ですが、「20160720」です。

まだ、勉強中の身ですので、ビューの選択式に入れると文書数繰り返し、処理が重くなるということも知らなかったです...

お恥ずかしい限りです。

自分のできそうな範囲で、変換用のフィールドを作成することにしました。

丁寧にやり方をご教示頂きまして、ありがとうございました。

回答日時:2016/07/21 16:37:34

いいね!数

0

mak様

ご返答頂きましてありがとうございました。

自分のできそうな範囲で、アドバイスを頂きました変換用のフィールドを作成することにしました。

まだまだ勉強中の身ですので、次回質問した際もアドバイス頂けると嬉しいです。

よろしくお願い致します。

回答日時:2016/07/21 16:44:30

いいね!数

1

うーん、ビューの選択式に現在の時刻を示す@Nowや@Todayを入れるのはホントやめといたほうがいいですよ。

Googleで"notes ビュー 選択式 時間"というキーワードで検索してみると、やめておいたほうがいい理由がいっぱい見つかると思います。

間違った方法が広まったらイヤなのでちゃんと書いておきます。

 

実際に以下の方法でお手軽に試してみたらどうでしょうか。最初にやりたかったのは、以下の選択式ですね。

あらかじめ"20160720"形式の更新日を時刻形式に変換しておいたとしても本質的には一緒です。

date_limit := @Text(@Adjust(@Today; -3; 0;0;0;0;0); "S0");
limit_stamp:= @ReplaceSubstring(date_limit; "/"; "");
SELECT ((Form = "main") & (更新日 >= @TextToNumber(limit_stamp) ))
  • 1行目は3年前の日付を@Adjust()で求めて文字列に変換。"2013/07/20"のような文字列が得られます
  • 2行目は"/”を取り除いて、"20130720”の文字列を組み立ててます
  • 後はSelectで[更新日]と比較するだけ。比較できるように"20130720"という文字列を20130720という数値に変換してます

一 見よさそうに見えますが、選択式の中の@Todayは現在の時刻から日付を得てるので、式を評価するとさっきとは違う値を返すかもしれません。そのため、 ビュー側は「更新があったかも」ということで更新インジケータが表示されたままになります。更新インジケータをクリックしても、すぐに更新アリとみなされ るのでまた更新インジケータが表示されることになります。

/Yac

回答日時:2016/07/21 21:54:18

いいね!数

0

yac4423様

ご連絡ありがとうございます。

調べてみたところ、ヘルプにも使わない方が良い理由が書かれており、本当に使わない方が良いことが分かりました...

教えて頂いた方法ですが、上記をビューの選択式に書いて良いのでしょうか。

初歩的な質問ですが、SELECT文の中に入れない方が良いということでよろしいでしょうか。

Emilie

回答日時:2016/07/27 11:09:35

いいね!数

0

こんにちは。

(1) 上記をビューの選択式に書いて良いのでしょうか。

そうです。 3行まとめて書きます。

(2) SELECT文の中に入れない方が良いということでよろしいでしょうか

「SELECT文の中にいれる」というのが何を意味してるのかよくわかりません。質問はわかるように書きましょうよ。

/Yac

 

回答日時:2016/07/27 22:58:10

いいね!数

0

yac4423様

こんにちは。

ご回答ありがとうございます。

(1)3行まとめて書いたところできました。

(2)ビューの選択式の「SELECT ~」の中で@Today、@Nowを使わない方が良いということでよろしいでしょうか。

  何と言って良いのか分からず、伝わらなかったらすみません。

Emilie

回答日時:2016/07/28 12:30:37

いいね!数

0

私の3行のサンプルだと、SELECTの式には@Todayは書かれてませんが、これは、「入ってない」という認識をされてるんですよね。

それは間違いです。

limi_stampという変数は@Todayの結果を反映してるので、「入ってる」と認識すべきです。

言いたいのは、ビューの「選択式」に@Todayや、@Nowを入れるな、ということですけど、聞きたいこととなんか違うような気がします。

 

回答日時:2016/07/28 12:58:44

いいね!数

0

横から失礼します。

Emilieさま、以下のリンクをご参考にしてください。

http://www-01.ibm.com/support/docview.wss?uid=swg21462489

 

mak

回答日時:2016/07/28 13:09:15

いいね!数

0

yac4423様

勉強不足ですみません。

yac4423様が始めから何回も言っているビューの選択式で、@Today、@Nowを使わない方が良いという意味がやっと理解できました。

理解力がなくてすみません。また、最初の質問から脱線してしまいすみませんでした。

Emilie

 

回答日時:2016/07/30 15:48:11

いいね!数

0

mak様

リンクを教えて頂きましてありがとうございます。

拝読させて頂きます。

Emilie

回答日時:2016/07/30 15:51:03