「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:2683
現在:2


クエリーでの日付加算方法

ページOpenOffice.org FAQの登録ページ
投稿者匿名
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2011-05-05 10:22:32 (木)
OSWindows XP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

「氏名」,「日付」フィールドのあるクエリーがあり、このクエリーの中に、「日付」フィールドに60日をプラスした日付が表示されるフィールドを新たに追加したいと思っています。

単純に「"日付"+60」や、DATEADDを使って試してみましたがどちらもエラーが出てしまいダメなようです。

これを表示する事のできる方法がありましたら教えていただきたいと思います。 よろしくお願いいたします。


確かにおかしいですね

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は未実装でした

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のバージョンで動作に変化

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を使うと、

faq6_217_2.png

以下のように型変換関数を利用した日付型の加算が実行できます。

faq6_217_3.png

でも、Javaのバージョンを「1.6.0_18」に戻すと以下のようなエラーダイアログが表示されます。

faq6_217_1.png

これは、他の「1.6.0_24」(最新でしたっけ)なWindows環境でも同じエラーで実行できません。

なお、以下はUbuntu 10.04+LibreOffice 3.4beta4、Javaは「1.6.0_20」(OpenJDK)ですが、問題なく実行できます。

faq6_217_4.png

なんとなくですが、Baseの標準データベースであるHSQLDBに問題がある可能性もあるという気もしてきました。

Javaの「1.6.0_17」は、3.2.1までのBaseを実行させるために必須なので残してあります。また、最近ではJavaをアップデートすると旧バージョンが削除されるのでアップデートしないままだったりします。アップデートしないのはOpenOffice.orgの検証環境だけですが。

補足

M.Kamataki (2011-05-08 11:08:46 (日))

上記のスナップショットで利用したサンプルファイルを添付します。

filefaq6_217sample1.odb

日付型の加算で用いた「a」フィールドは十進数型で「1」と「-1」が入力されています。

別名で「DATEADD」というフィールド名にしています。そのままではシリアル値で表示されるので列の書式を日付型に変更しています。これは3.3の不具合で列の書式を保存しておけません。

ご丁寧な回答ありがとうございます

匿名 (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には全然詳しく無いので、私の理解が足りないのですが、
他に必要な操作がありましたら、お教えいただけたら幸いです。

何度もすみません。
よろしくお願いいたします。

再起動しちゃいけません

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」に切り替わっているはずなのでサンプルのクエリーを実行してみてください。

表示することができました!

匿名 (2011-05-11 14:32:17 (水))

M.Kamataki

お世話になっております。

無事に表示する事ができました!!
大変助かりました。

ありがとうございました。

お名前:
題名:


添付ファイル: filefaq6_217sample1.odb 1270件 [詳細] filefaq6_217_4.png 504件 [詳細] filefaq6_217_1.png 503件 [詳細] filefaq6_217_3.png 485件 [詳細] filefaq6_217_2.png 505件 [詳細]