BLOGTIMES
2007/11/07

ODBC 日付時刻形式ではまる

  msaccess 
このエントリーをはてなブックマークに追加

ちょっとワケあってSquirrelSQL*1を使ってODBC経由でクエリを叩いていたんですが、日付フィールドを含んだSQLを入力すると怒られるという現象にちょっとはまってしまいました。

SELECT count(Id) FROM hoge WHERE Created = '1985-01-01 00:00:00'; [Microsoft][ODBC Microsoft Access Driver] 抽出条件でデータ型が一致しません。

最近型の変換が比較的臨機応変なMySQLしか使っていないのがバレバレですね。最初はOracleのようにto_date()みたいな関数を使わなきゃいけないんだとばかり思って、一生懸命関数のリファレンスを調べてみたんですが日付型に変換できそうな関数はありませんでした。

関数ではなく、リテラルでした。

いろいろ苦労したんですが、結論として分かったことはODBCでは日付型を表すためのリテラル*2をつかわなければならないようだということです。

ODBC 日付時刻形式

ADO、OLE DB、および ODBC ベースの API を使用しているアプリケーションでは、この ODBC タイムスタンプ形式を使用して日付時刻を表すことができます。
(中略)
ODBC 時刻日付定数の例を次に示します。
{ ts '1998-05-02 01:23:56.123' }
{ d '1990-10-02' }
{ t '13:33:41' }

ということで、先ほどのSQLは以下のようにするとあっさり動作しました。

SELECT count(Id) FROM hoge WHERE Created = { ts '1985-01-01 00:00:00'};

ということで、忘れないようにメモ。

  • *1: JavaでできたSQLクライアントソフト
  • *2: プログラム中に存在する型を表すための特定の書式を伴った定数と言えばいいんでしょうか。

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/2268
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン