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

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

[ 最新記事及び返信フォームをトピックトップへ ]

■4408 / inTopicNo.21)  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] 削除キー/
■4409 / inTopicNo.22)  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] 削除キー/
■4410 / inTopicNo.23)  Re[13]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ 通りすがり -(2009/02/26(Thu) 22:02:45)
    桐が悪い訳じゃないですよ、って説明したかったんだけど

    もう良いよ
引用返信 [メール受信/OFF] 削除キー/
■4411 / inTopicNo.24)  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] 削除キー/
■4412 / inTopicNo.25)  Re[13]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ 桐々舞 -(2009/02/27(Fri) 09:01:53)
    ODBCスカラー関数にはYEAR,WEEK,MONTHはありますけどDAYは無いですよ。
    始めから無いものを桐には何故かないと言うのは可笑しいですよ。
引用返信 [メール受信/OFF] 削除キー/
■4413 / inTopicNo.26)  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] 削除キー/
■4414 / inTopicNo.27)  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] 削除キー/
■4415 / inTopicNo.28)  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] 削除キー/
■4416 / inTopicNo.29)  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] 削除キー/
■4417 / inTopicNo.30)  Re[14]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ うにん -(2009/02/27(Fri) 12:46:16)
    No4412に返信(桐々舞さんの記事)
    > ODBCスカラー関数にはYEAR,WEEK,MONTHはありますけどDAYは無いですよ。
    > 始めから無いものを桐には何故かないと言うのは可笑しいですよ。

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

引用返信 [メール受信/OFF] 削除キー/
■4418 / inTopicNo.31)  Re[15]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ 桐々舞 -(2009/02/27(Fri) 13:16:53)
    例えば2009-01-32だと桐のDAYとは結果が違ってしまいますよ。
引用返信 [メール受信/OFF] 削除キー/
■4419 / inTopicNo.32)  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] 削除キー/
■4420 / inTopicNo.33)  Re[16]: 外部DB(ODBC)接続時に日付の日を取り出したい。
□投稿者/ うにん -(2009/02/27(Fri) 13:57:11)
    No4418に返信(桐々舞さんの記事)
    > 例えば2009-01-32だと桐のDAYとは結果が違ってしまいますよ。

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

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

    1582-10-16 は、桐の#DAY() と ODBCのDAYOFMONTH( date_exp ) で 同じになる〜?
    って、自分で試してないんだけど、違う値を返す関数である予感…
引用返信 [メール受信/OFF] 削除キー/
■4422 / inTopicNo.35)  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] 削除キー/
■4423 / inTopicNo.36)  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] 削除キー/
■4424 / inTopicNo.37)  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] 削除キー/

<前の20件

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

このトピックに書きこむ

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

Mode/  Pass/

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

- Child Tree -
- Antispam Version -