
データ型の違う日付フィールドを比較した場合同じ日付でもマッチングしないのでしょうか?
SQL 2008
smalldatetime → 1990/1/1 起点
datetime → 1753/1/1 起点
date → 1/1/1起点
ACCESS 2003
date → 100/1/1 起点
それぞれ日付を整数に変換して保持していると考えています。
ACCESSのdate型の項目に日付を代入してSQLを検索すると同じ日付なのに
SQLのフィールドの型がdatetime型だとマッチするのですが、
date型だとマッチしないんです、どうしてでしょうか?
No.2ベストアンサー
- 回答日時:
プロバイダは外のデータとの受渡のインターフェースを提供するものです。
mdbにせよ、adpにせよ、直接SQL Serverのデータにアクセスできるわけではありません。
複数提供されているプロバイダのいずれかを使ってSQL Serverにアクセスして、データのやり取りをしているわけです。
SQL Serverの場合、一般的に使われているのが、
・Microsoft OLE DB Provider for ODBC(MSDASQL)
・Microsoft OLE DB Provider for SQL Server(SQLOLEDB) ~最も一般的
・Microsoft SQL Server Native Client(SQLNCLI) ~SQL Server 2005対応
・Microsoft SQL Server Native Client 10.0(SQLNCLI10) ~SQL Server 2008対応
ポイントは以下の2点だと思います。
・DATE型はSQL Server 2008で登場したデータ型であり、それ以前には存在しなかったこと
(したがって、それ以前に提供されているプロバイダはDATE型に対応していない
=呼び出し元のアプリケーションで問題なく使えるような形で返すことを保証していない)
・MicrosoftのAccess開発チームは、SQL Server 2008に対応できる十分なインターフェースの提供をadpに関して行っていない
(これはOffice2007でも同じ。内部的にはSQLOLEDB固定で使っていると思います)
したがって、adpでDATE型を使うこと自体をやめた方がいいと私は思っています。
なお、smalldatetimeかdatetimeかについては、ストレージに余裕がなければsmalldatetime、それ以外ならdatetimeでいいと思います。
理由は以下の2点です。
・datetime型の方が優先順位が高いから
(datetime型とsmalldatetime型の間で演算をすると、smalldatetime型はdatetime型に暗黙変換されます)
・すべてのテーブルで共通して同じ型を使うようにしておいた方が開発上コントロールしやすいから
ご参考までに。
No.1
- 回答日時:
CREATE TABLE dttbl (DT1 datetime,DT2 smalldatetime,DT3 date)
GO
INSERT INTO dttbl VALUES ('2009/10/31','2009/10/31','2009/10/31')
GO
--VB/VBAソース
Sub test()
Dim adCon As New ADODB.Connection
Dim adRS As New ADODB.Recordset
' adCon.Open "Provider=SQLOLEDB;Data Source=(インスタンス);Initial Catalog=(データベース);User ID=(ユーザID);Password=(パスワード)"
' adCon.Open "Provider=SQLNCLI;Data Source=(インスタンス);Initial Catalog=(データベース);User ID=(ユーザID);Password=(パスワード)"
' adCon.Open "Provider=SQLNCLI10;Data Source=(インスタンス);Initial Catalog=(データベース);User ID=(ユーザID);Password=(パスワード)"
adRS.Open "SELECT * FROM dttbl", adCon
Do Until adRS.EOF
MsgBox adRS.Fields("DT1").Type
MsgBox adRS.Fields("DT2").Type
MsgBox adRS.Fields("DT3").Type
adRS.MoveNext
Loop
adRS.Close
adCon.Close
Set adRS = Nothing
Set adCon = Nothing
End Sub
・SQLOLEDB/SQLNCLIの場合
DT1のType:adDBTimeStamp(135)
DT2のType:adDBTimeStamp(135)
DT3のType:adVarWChar(202)
・SQLNCLI10の場合
DT1のType:adDBTimeStamp(135)
DT2のType:adDBTimeStamp(135)
DT3のType:adDBDate(133)
これが「プロバイダが新しい型をサポートしていない」ということの意味です。型が判断できないので文字型として返しています。
文字型と判断されている間は、キャストされない限りシリアル値云々というのは関係がないということでしょう。
ありがとうございます。
昨日試していて「文字列として比較しているのではないか」と
云う所までたどりつけました。
Date型のみSQL側で「/」が「-」に変わって格納されてしまい文字列と
比較してマッチしないようです。
比較時にFormat関数で「yyyy-mm-mm」の形で指定するときちんと
マッチします。
ただ、Findでは上記の状況ですが、Dlookup等の定義域集計関数では
Format関数を使わなくても正常にマッチするようです。
これはプロバイダの関係なんでしょうか?
(プロバイダと云うものを理解できていません、それでも動いているので
なかなか勉強するに至って降りません)
いまいちスッキリしておりません、単純な日付をdatetimeにするか
smalldatetimeにするかで悩みぶり返してしまいました(^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- MySQL 2つのカラムでgroup by の動作をさせるSQLの構文を教えてください。 3 2022/05/19 19:02
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Excel(エクセル) DATE関数で指定する「日」のセルが関数の場合の対処法 5 2022/09/14 15:46
- JavaScript gasについて 1 2022/05/31 21:51
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Perl ExcelVbaファイルを.xls から .xlsm に変更したときの日付の変化に対応する方法。 2 2022/08/15 16:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
差し込み印刷で日付の曜日を表...
-
Word2010 フィールド内での和...
-
ファイルメーカーPro7でカレン...
-
ACCESSの自動連番について
-
【Word】 今日の「年」「月」...
-
【再投稿】メモ帳からアクセス...
-
Wordで、ヘッダーに印刷日付を...
-
日付の挿入
-
VBAでエクセルシートを更新...
-
マクロボタンを押すと、ファイ...
-
「24日の0時」って・・・
-
日付の大小の表現
-
エクセルで最高値、最低値の日...
-
エクセル マクロ 名前を付けて...
-
回覧板の日付について質問です...
-
「時間」、「期日」、「日付」...
-
excelで、セル内に文字が入力さ...
-
エクセルで数字から名前に変...
-
Excel関数 「日付を入力...
-
エクセルのチェックボックスを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
差し込み印刷で日付の曜日を表...
-
日付を差し込み印刷で表示した...
-
日付を昇順で並び替えし、空白...
-
Wordの日付変換ってできますか?
-
クエリで日付型のIIF関数の使用
-
【Word】 今日の「年」「月」...
-
日付型のテキストボックスに数...
-
Wordで、ヘッダーに印刷日付を...
-
日付がインポートされない
-
アクセス:エクセルからのイン...
-
重複を除外したカウント方法を...
-
【Tableau Desktop】文字列から...
-
ファイルメーカーで日付けを変...
-
Word2010 フィールド内での和...
-
ファイルメーカーの自動計算に...
-
accessで残業時間計算
-
Accessで秒を時間で表示させる...
-
ACCESSの自動連番について
-
ファイルメーカーの日付の検索
-
ファイルメーカー 実在の日付...
おすすめ情報