(現在 過去ログ28 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

[ 親記事をトピックトップへ ]

このトピックに書きこむ

過去ログには書き込み不可

■4424 / inTopicNo.1)  Re[20]: 外部DB(ODBC)接続時に日付の日を取り出したい。
  
□投稿者/ hidetake -(2009/02/28(Sat) 08:49:59)
    2009/02/28(Sat) 08:59:51 編集(投稿者)

    > "1582-10-16"

    Access を ODBC で通すと '1753-01-01' 〜 の日付しか
    正しく扱われないようですね。
    これ以前の日付は桐からは入力もできませんし、Access
    側の日付も正しく取得もできません。

    Oracle も TT_DATEデータ型 , TT_TIMESTAMPデータ型 は
    '1753-01-01' 〜 '9999-12-31' の範囲なのかな?
    TIMESTAMP型 はもっと範囲が広いようですが。

    PostgreSQL は、範囲は広いので、桐からでももっと古い
    日付もそのまま扱えるのですが。



    > DAYOFMONTH({d '1582-10-16'})=6 になる筈で

    その根拠はわかりませんが、'1753-01-01' 以前の日付は
    ドライバ側でオーバーフローして正しい結果を得られない
    けど、DAYOFMONTH は Access の場合はどこで Access 側
    の関数に置き換えられるかわからないけど、Access 側では
    DAY関数などに置き換えられて Access側の正しい日付で
    計算され、その結果を ODBC に返すだけだから、別に問題
    ないんじゃないの?

引用返信 [メール受信/OFF] 削除キー/
■4423 / inTopicNo.2)  Re[19]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ 通りすがり -(2009/02/27(Fri) 23:16:06)
    検証ありがと

    DAYOFMONTH(date_exp)が関数の定義通りの正しい値を返すなら、
    DAYOFMONTH({d '1582-10-16'})=6 になる筈で、、
    桐の#DAY(d"1582-10-16")=16 とは異なると予想したんだけど

    > {fn DAYOFMONTH(date)}の返り値は 16
    同じ値を返すみたいだねぇ
引用返信 [メール受信/OFF] 削除キー/
■4422 / inTopicNo.3)  Re[18]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ hidetake -(2009/02/27(Fri) 20:37:26)
    2009/02/27(Fri) 20:43:48 編集(投稿者)

    > 1582-10-16 は、桐の#DAY() と ODBCのDAYOFMONTH( date_exp ) で 同じになる〜?
    > って、自分で試してないんだけど、違う値を返す関数である予感…

    Access にデータを置いた場合だけれど、
    ただその日付を取りだすだけで
    '1582/09/04' となる。
    桐内部では、月は 10 、日は 16 。
    {fn MONTH(date)}の返り値は 10
    {fn DAYOFMONTH(date)}の返り値は 16

    PostgreSQL にデータを置いた場合は
    ただその日付を取りだしても
    '1582/10/16' となる。
    PostgreSQL では YEAR も MONTH も
    {fn DAYOFMONTH(date)}も
    {fn MONTH(date)}もそのままでは
    通らないので省略。

    # 細かいDB毎の隅をつつけばきりが無い?


引用返信 [メール受信/OFF] 削除キー/
■4421 / inTopicNo.4)  Re[17]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ 通りすがり -(2009/02/27(Fri) 19:21:23)
    ども、

    1582-10-16 は、桐の#DAY() と ODBCのDAYOFMONTH( date_exp ) で 同じになる〜?
    って、自分で試してないんだけど、違う値を返す関数である予感…
引用返信 [メール受信/OFF] 削除キー/
■4420 / inTopicNo.5)  Re[16]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ うにん -(2009/02/27(Fri) 13:57:11)
    No4418に返信(桐々舞さんの記事)
    > 例えば2009-01-32だと桐のDAYとは結果が違ってしまいますよ。

    文字列の場合、ODBCでは使用できる形式が制限されてるのだから
    不正な日付に対してまで同じ結果になる必要はないのでは。

引用返信 [メール受信/OFF] 削除キー/
■4419 / inTopicNo.6)  Re[16]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ hidetake -(2009/02/27(Fri) 13:44:52)
    2009/02/27(Fri) 13:54:02 編集(投稿者)

    > 例えば2009-01-32だと桐のDAYとは結果が違ってしまいますよ。

    2009-01-32 このような値をとりえるのは文字列の場合だと
    思うけど、手元では YEAR でも DAYOFMONTH でも、あり得る
    日付文字列だとそのまま通るけど、2009-01-32 のような値
    だと YEAR でも DAYOFMONTH でもエラーになってしまいます。
    桐だと、もちろん#年も#日も通るのですけど。



    Time, Date, and Interval Functions
    http://msdn.microsoft.com/ja-jp/library/ms714639(en-us,VS.85).aspx

    DAYOFMONTH って ODBC 1.0 から備わっていたのですか。


引用返信 [メール受信/OFF] 削除キー/
■4418 / inTopicNo.7)  Re[15]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ 桐々舞 -(2009/02/27(Fri) 13:16:53)
    例えば2009-01-32だと桐のDAYとは結果が違ってしまいますよ。
引用返信 [メール受信/OFF] 削除キー/
■4417 / inTopicNo.8)  Re[14]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ うにん -(2009/02/27(Fri) 12:46:16)
    No4412に返信(桐々舞さんの記事)
    > ODBCスカラー関数にはYEAR,WEEK,MONTHはありますけどDAYは無いですよ。
    > 始めから無いものを桐には何故かないと言うのは可笑しいですよ。

    DAYという名前の関数はないけど、桐の#DAYはDAYOFMONTHのことなんだから
    「無いもの」ってこともないと思うんだけど。

引用返信 [メール受信/OFF] 削除キー/
■4416 / inTopicNo.9)  Re[7]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ 長門孝雄 -(2009/02/27(Fri) 12:29:02)
    No4411に返信(hidetakeさんの記事)
    > 長門さんが使っているのは、ORACLE にチェックをつけ
    > ている場合で、#str(日時型項目) が通ったとかでは
    > 無いのでしょうか?
    >
    > ODBC をチェックして ODBC 接続した場合は ODBC関数の
    > 方を ORACLE をチェックした場合は ORACLE関数を使って
    > いるのですかね? > 長門さん
    >
    あまり難しいことはわかりませんが、#str(日時型項目)がエラーにもならず
    文字列型に変換できました。
    oracleは8iで桐は2009を使用しています。
引用返信 [メール受信/OFF] 削除キー/
■4415 / inTopicNo.10)  Re[15]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ hidetake -(2009/02/27(Fri) 10:40:30)
    > sql="SELECT id, date, DAY(date) FROM test"

    桐は
    sql="SELECT id, date, YEAR(date) FROM test"
    では無くって
    sql="SELECT id, date, {fn YEAR(date)} FROM test"
    で処理しているということね。

    だから
    sql="SELECT id, date, {fn YEAR(date)} FROM test"
    は通っても
    sql="SELECT id, date, {fn DAY(date)} FROM test"
    は通らないということね。

    と言うことでおしまい。

    それと、Oracle だけは特殊な処理をしていて、専用の
    アクセスを行ってその場合のみと言うことなのですね。

    # やっぱパススルーが欲しいですね!
    # なんか ThroughSQL とかあるようだけれど・・・


引用返信 [メール受信/OFF] 削除キー/
■4414 / inTopicNo.11)  Re[14]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ 通りすがり -(2009/02/27(Fri) 10:30:00)
    2009/02/27(Fri) 10:45:00 編集(投稿者)

    ああ、まあ、ODBCの規格自体に、DAY() がないからねぇ
    DAYOFMONTH( date_exp )、DAYOFWEEK( date_exp )、DAYOFYEAR( date_exp )、とかは
    もともと桐が持ってないし、ってことで

    >> 4413 hidetake さん
    > 手元の Access では、次のような VBS では DAY関数も通るのですけど
    それ、VB の関数
引用返信 [メール受信/OFF] 削除キー/
■4413 / inTopicNo.12)  Re[14]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ hidetake -(2009/02/27(Fri) 10:11:00)
    > ODBCスカラー関数にはYEAR,WEEK,MONTHはありますけどDAYは無いですよ。
    > 始めから無いものを桐には何故かないと言うのは可笑しいですよ。

    これって Accessの場合(だけ)はと言うことなのですか?

    手元の Access では、次のような VBS では DAY関数も通るのですけど
    -------------------------------------------------------------
    Dim obj,rs
    dsn="Access"
    sql="SELECT id, date, DAY(date) FROM test"

    Set obj = Wscript.CreateObject("ADODB.Connection")
    obj.Open dsn
    SQLQuery = sql

    Set rs = obj.Execute(SQLQuery)

    Do While Not rs.EOF
    For i=0 to rs.Fields.Count -1
    Wsh.Stdout.Write """" & rs(i) & """" & ","
    Next
    Wsh.Stdout.Write vbCrLF
    rs.MoveNext
    Loop

    Set rs = Nothing
    Set obj = Nothing
    WScript.Quit
    -------------------------------------------------------------

    もちろん、DAY関数で無くとも
    sql="SELECT id, date, DATEPART('d',date) FROM test"
    としても日は取り出せるのですけど。

    そう言う話では無いのかな?


引用返信 [メール受信/OFF] 削除キー/
■4412 / inTopicNo.13)  Re[13]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ 桐々舞 -(2009/02/27(Fri) 09:01:53)
    ODBCスカラー関数にはYEAR,WEEK,MONTHはありますけどDAYは無いですよ。
    始めから無いものを桐には何故かないと言うのは可笑しいですよ。
引用返信 [メール受信/OFF] 削除キー/
■4411 / inTopicNo.14)  Re[6]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ hidetake -(2009/02/26(Thu) 22:57:27)
    > Oracle だけは、やはり独自に処理しているのですかね?
    > TO_CHAR を使っているのかな?

    Oracle はさわったことが無いのでピンと来ませんが
    桐ver8 の時のマニュアルの「外部DB」の図にも何の
    説明もなく、データソースのところの「種類」の欄が
    あり、ODBC と ORACLE を選べるような画面になって
    いましたが、これって、Oracle の 古くは SQL*Net
    とか Net8 とか 今ではOracle Net と言うようなもの
    が入れてあり、これを使っている場合のみ上記選択肢
    がでるようになっているのですかね?
    (選択画面を添付)

    長門さんが使っているのは、ORACLE にチェックをつけ
    ている場合で、#str(日時型項目) が通ったとかでは
    無いのでしょうか?

    ODBC をチェックして ODBC 接続した場合は ODBC関数の
    方を ORACLE をチェックした場合は ORACLE関数を使って
    いるのですかね? > 長門さん


469×330 => 250×175

2224.jpg
/53KB
引用返信 [メール受信/OFF] 削除キー/
■4410 / inTopicNo.15)  Re[13]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ 通りすがり -(2009/02/26(Thu) 22:02:45)
    桐が悪い訳じゃないですよ、って説明したかったんだけど

    もう良いよ
引用返信 [メール受信/OFF] 削除キー/
■4409 / inTopicNo.16)  Re[5]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ hidetake -(2009/02/26(Thu) 21:22:08)
    >>#str(日付型)がoracleでは使えるらしいですが、桐のマニュアルでは
    >>#str(数値)しかサポートしてないはずなんですけど。
    >>逆に、#str(intやshort)でもpostgresqlでやってみたら
    >>「'#文字列'関数はサポートしていません」になってしまった。
    >>漢字の関数名がエラーメッセージに出てくるのも変だけど、
    >>型変換のSQL標準はCASTのはずなんでODBCにはSTR関数があるんでしょうか。
    >>外部表の計算項目式は、桐の関数を使えるわけでもないのに
    >>直接なげてるわけでもない、中途半端な仕様?
    >
    > 桐の ODBC関数のヘルプを見ると
    > ---------------------------------
    > num を文字列型に変換する。
    >
    > 《別名》 #STR #文字列
    >
    > ODBC関数:
    > CONVERT( num , SQL_CHAR )
    > ---------------------------------
    > と記載されていますね。
    >
    > で、手元の資料で CONVERT 関数を見てみると
    > サポートしているのは SQL Server だけでした。
    >
    > Oracle では使えたそうだけれど、新しいのでは
    > CONVERT 関数が追加になったのですかね?
    >

    前のコメントを見直して KIRIORCL.TBL も再度見直して
    見ました。

    #文字列( num )
    --------------------------------------------------
    num を文字列型に変換する。

    《別名》 #STR #文字列

    ORACLE関数:
    TO_CHAR( num )
    --------------------------------------------------
    Oracle だけは、やはり独自に処理しているのですかね?
    TO_CHAR を使っているのかな?

    Oracle で TO_CHAR を使えば、文字列に変換したい式
    以外のパラメータを省略すると、日付もデフォルトの
    フォーマットで文字列に変換してくれるようです。


引用返信 [メール受信/OFF] 削除キー/
■4408 / inTopicNo.17)  Re[12]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ hidetake -(2009/02/26(Thu) 20:56:37)
    > うーん、Access とか関係あるのかなぁ?
    > PCに Access が入ってても、入って無くても、
    > それとは無関係に mdb は ODBC で接続できるんじゃないの?

    ここのツリーは
    「外部DB(ODBC)接続時に日付の日を取り出したい。」
    で、たまたま今回は対象が Access だったけれど、Access 以外
    なら、この希望は叶えられるのか? って、言うことだと思うの
    ですが。

    もちろん、Access でも不可能だけれど、他の DB でも桐自体が
    そのような関数を持ち合わせていないので、Access に Access
    する前に式を記入する段階で蹴られる。
    なんで、そこまで Access にとらわれているのですか?

    桐は
    > 日付を数値型に変換する関数が、年、月、時、分、秒と揃って
    > いるのになぜか日だけ無いんですよね・・・
    って、言うことだと思いますが?


引用返信 [メール受信/OFF] 削除キー/
■4407 / inTopicNo.18)  Re[11]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ 通りすがり -(2009/02/26(Thu) 20:28:20)
    ども、

    > Oracle & PostgreSQL & MySQL がもつ EXTRACT 関数に対応する
    > DATEPART関数は MS SQL Servedr に限らず Access も備えている
    > ようです。

    うーん、Access とか関係あるのかなぁ?
    PCに Access が入ってても、入って無くても、
    それとは無関係に mdb は ODBC で接続できるんじゃないの?
引用返信 [メール受信/OFF] 削除キー/
■4406 / inTopicNo.19)  Re[10]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ hidetake -(2009/02/26(Thu) 20:13:16)
    2009/02/26(Thu) 20:20:13 編集(投稿者)

    > mdb の外部データベース接続で #日時値()が使えないのは、桐のせいじゃなくて、
    > 単にJETエンジンには該当関数が無い、だけじゃねーの?

    あの #4390 にも書いたけど、Access でも SQL Server も DB2 も
    (Oracle と PostgreSQL と MySQL を除く) DAY関数自体は備えて
    いるようですよ。ただ、桐側がこれを使うための ODBC関数として
    #日 (#DAY) 関数を備えていないのです。

    Oracle と PostgreSQL と MySQL も DAY関数では無く、他の関数を
    使えば同じ結果は得られるのですけれど、まさか、桐が相手側を
    見て、そのリストを持っていて切り分けて使ってはいないと思うの
    で桐で持っていても、相手によって使える関数は限られてくるわけ
    すが。

    Oracle & PostgreSQL & MySQL がもつ EXTRACT 関数に対応する
    DATEPART関数は MS SQL Servedr に限らず Access も備えている
    ようです。

    なので、DAY 関数でも EXTRACT 関数もしくはDATEPART関数でも
    複数の方式で、いずれの DB も「日」だけを取りだすことはODBC的
    (SQL関数的)には可能なのです。ただ、これに対応する「#日」関数
    を桐が何故か持ち合わせていないと言うことが、今回の話題です。

    Access に限らず他の DB でも「日」だけが取りだせないという謎
    の仕様が問題となってなっています。


引用返信 [メール受信/OFF] 削除キー/
■4405 / inTopicNo.20)  Re[10]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ 通りすがり -(2009/02/26(Thu) 19:13:30)
    時間あったので MS の ODBC Programmer's Reference 見てみた
    使える関数は、各 ODBCドライバーの実装に依存する、ってことが書いてある

    JETDBエンジンじゃなく ODBCドライバーの対応の問題みたい
    もちろんDBエンジンが対応してないとドライバーも書けないんだろうけど
引用返信 [メール受信/OFF] 削除キー/

次の20件>

トピック内ページ移動 / << 0 | 1 >>
Mode/  Pass/

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -