* クエリーでの日付加算方法 [#g36a1b3e]
 |RIGHT:|LEFT:|c
 |~ページ|[[OpenOffice.org FAQの登録ページ]]|
 |~投稿者|匿名|
 |~分類|#listbox3(Q&A,faq03,class)|
 |~優先順位|#listbox3(普通,faq03,priority)|
 |~状態|#listbox3(完了,faq03,state)|
 |~カテゴリー|#listbox3(Base データベース,faq03,category)|
 |~投稿日|2011-05-05 10:22:32 (木)|
 |~OS|Windows XP|
 |~依存するページ||
 |~バージョン|#listbox3(3.3.0,faq03,version)|
 
 //////////バグ対策(以降マッチさせない)
 
 ** メッセージ [#a41c02a1]
 |LEFT:|c
 |回答ページでは行末に「~」を付加する必要はありません|
 「氏名」,「日付」フィールドのあるクエリーがあり、このクエリーの中に、「日付」フィールドに60日をプラスした日付が表示されるフィールドを新たに追加したいと思っています。
 
 単純に「"日付"+60」や、DATEADDを使って試してみましたがどちらもエラーが出てしまいダメなようです。
 
 これを表示する事のできる方法がありましたら教えていただきたいと思います。
 よろしくお願いいたします。
 
 
 
 
 
 ----
 ***確かにおかしいですね [#lfebc0bd]
 >M.Kamataki (2011-05-06 23:31:48 (金))~
 ~
 英語の以下のフォーラムも同じ話題だと思います。~
 ~
 DATE_ADD alternative?~
 http://user.services.openoffice.org/en/forum/viewtopic.php?f=61&t=5764&p=26919~
 ~
 VilleroyさんのCONVERT関数を利用した例も実行できないです。~
 ~
 また、Villeroyさんが添付されたJavaライブラリーでも実行できないのは、不具合・要望データベースであるBugZillaに以下のように登録されているようですが、無効になっています。~
 ~
 Java library with userdefined functions not working anymore~
 http://openoffice.org/bugzilla/show_bug.cgi?id=89534~
 ~
 DATEDIFFは、faq/3/352「年齢計算について」のようにうまく使えています。~
 
 //
 ***DATEADDは未実装でした [#edc92475]
 >M.Kamataki (2011-05-07 00:26:19 (土))~
 ~
 Baseの標準であるHSQLDBのバージョンは1.8系です。以下のメーリングリストでのやりとりを見ると、1.8系ではDATEADDが未実装ですね。~
 ~
 http://www.mail-archive.com/users@dba.openoffice.org/msg04987.html~
 ~
 このメールで紹介されているHSQLDBの「Built-in functions and Stored Procedures」の紹介にはDATEADDは入っていません。~
 ~
 なお、HSQLDB 2.0ではDATEADDが以下のページにあるように実装されているようなので、いずれは使えるようになるのではと思います。~
 ~
 http://hsqldb.org/doc/2.0/guide/builtinfunctions-chapt.html#builtin_functions_datetime-sect~
 
 //
 ***Javaのバージョンで動作に変化 [#obebbf55]
 >M.Kamataki (2011-05-08 11:01:31 (日))~
 ~
 英語のフォーラムで紹介されていたCONVERTなどの型変換関数を利用した日付型の加算方法ですが、OpenOffice.org 3.0、3.1あたりでは動作していたようです。その頃のJavaのバージョンは「1.6.0_17」(OpenOffice.orgのオプションの表記)でした。OpenOffice.org 3.3でも以下のようにその頃のJavaを使うと、~
 ~
 &attachref(faq6_217_2.png,nolink);~
 ~
 以下のように型変換関数を利用した日付型の加算が実行できます。~
 ~
 &attachref(faq6_217_3.png,nolink);~
 ~
 でも、Javaのバージョンを「1.6.0_18」に戻すと以下のようなエラーダイアログが表示されます。~
 ~
 &attachref(faq6_217_1.png,nolink);~
 ~
 これは、他の「1.6.0_24」(最新でしたっけ)なWindows環境でも同じエラーで実行できません。~
 ~
 なお、以下はUbuntu 10.04+LibreOffice 3.4beta4、Javaは「1.6.0_20」(OpenJDK)ですが、問題なく実行できます。~
 ~
 &attachref(faq6_217_4.png,nolink);~
 ~
 なんとなくですが、Baseの標準データベースであるHSQLDBに問題がある可能性もあるという気もしてきました。~
 ~
 Javaの「1.6.0_17」は、3.2.1までのBaseを実行させるために必須なので残してあります。また、最近ではJavaをアップデートすると旧バージョンが削除されるのでアップデートしないままだったりします。アップデートしないのはOpenOffice.orgの検証環境だけですが。~
 
 //
 ***補足 [#o0eca161]
 >M.Kamataki (2011-05-08 11:08:46 (日))~
 ~
 上記のスナップショットで利用したサンプルファイルを添付します。~
 ~
 &attachref(faq6_217sample1.odb);~
 ~
 日付型の加算で用いた「a」フィールドは十進数型で「1」と「-1」が入力されています。~
 ~
 別名で「DATEADD」というフィールド名にしています。そのままではシリアル値で表示されるので列の書式を日付型に変更しています。これは3.3の不具合で列の書式を保存しておけません。~
 
 //
 ***ご丁寧な回答ありがとうございます [#db317a69]
 >匿名 (2011-05-10 11:00:13 (火))~
 ~
 M.Kamataki様~
 ~
 大変丁寧な解説ありがとうございます。~
 ~
 現在使用している環境に、Java「1.6.0_17」が無かったので、~
 早速M.Kamataki様の情報を基に、インストールして、オプションで~
 1.6.0_17を指定後Openofficeを再起動し、添付いただいたサンプルのクエリーを~
 開いてみたのですが、開く事ができませんでした。~
 ~
 ~
 1.6.0_17をインストールするだけでは同じ環境にはならないのでしょうか??~
 Javaには全然詳しく無いので、私の理解が足りないのですが、~
 他に必要な操作がありましたら、お教えいただけたら幸いです。~
 ~
 何度もすみません。~
 よろしくお願いいたします。~
 
 //
 ***再起動しちゃいけません [#yb334788]
 >M.Kamataki (2011-05-10 11:31:53 (火))~
 ~
 3.0になってからOpenOffice.orgは、複数のバージョンのJavaがインストールされている場合は、常に新しいバージョンのものを利用するようになっています。したがって、旧バージョンのJavaを利用するなら再起動してはいけません。~
 ~
 また、Javaの切り替えはOpenOffice.orgの起動直後に行う必要があります。オプションダイアログボックスで上記の画面のように「1.6.0_17」をオンにして「OK」をクリックします。その際、「再起動」のメッセージは出ないはずです。この状態で「1.6.0_17」に切り替わっているはずなのでサンプルのクエリーを実行してみてください。~
 
 //
 ***表示することができました! [#h6ece94e]
 >匿名 (2011-05-11 14:32:17 (水))~
 ~
 M.Kamataki様~
 ~
 お世話になっております。~
 ~
 無事に表示する事ができました!!~
 大変助かりました。~
 ~
 ありがとうございました。~
 
 //
 #article