1

レコードをエクスポートしましたが、特定の日にエクスポートされたレコードを知りたいです。それは動作しません。クエリを実行した場合のデータは次のとおりです。

* comapny Name *     * date exported *
ABC Company, Inc    2011-08-01 15:44:52.857
XYZ Company, Inc    2011-08-01 15:44:52.857

完全一致を取得しないこのコマンドを発行します

select companyname, exporteddate from mytable exporteddate = '2011-08-01' <- does not work
select companyname, exporteddate from mytable exporteddate like '%2011-08-01%' <-- tried this variation too and many other, did not work

興味深いのは、>=、>、<= が機能することです。本当に問題は何ですか?エクスポートされた日付は、datetime フィールドとして宣言されます。

select companyname, exporteddate from mytable exporteddate >= '2011-08-01' <- this works

私はWindows XP、MS-SQL 2005 SP3を使用しています(正確ではありませんが、近いです)。

4

7 に答える 7

5

= '2011-08-01'その日付の真夜中のみに一致datetimesします (つまり、 の値を持つすべての行2011-08-01 00:00:00.00)。

クエリを実行する最良の方法はwhere exporteddate >= '20110801' and exporteddate < '20110802'

これは sargable であり、あいまいな形式を回避し、終了条件をオンにした代替datetimeよりも優れています。これは、後の段階で新しい SQL Server 2008 データ型に移行した場合に壊れるデータ型の最大精度に関する実装の詳細に依存するためです。 .BETWEEN20110801 23:59:59.997datetimedatetime2

于 2011-09-23T19:19:15.300 に答える
1

問題は、DATETIME フィールドを使用して DATE を格納していることです。ご覧のとおり、データは実際にはミリ秒単位で保存されます。

これを機能させるには、次のことができます。

  1. DATETIME 値の範囲で検索する

    WHERE exporteddate BETWEEN '2011-08-01 00:00:00.000' AND '2011-08-01 23:59:59.999'

  2. ストレージを DATETIME から DATE に変換します (単一の日付で複数のロードを実際に区別する必要がない場合の最も簡単なソリューション)。

于 2011-09-23T19:19:11.570 に答える
0

日付フィールドはテキストフィールドのようには機能しません。

最初の機能しない選択には、(データにある)時間が含まれていません。日付を切り捨てるか、年/月/日のみの形式を使用して文字列に変換する必要があります。

LIKEステートメントについても同じです。テキストフィールドではありません。

ただし、ご覧のとおり、日付は>、<などを使用して等しいかどうかを確認できます。

于 2011-09-23T19:21:33.253 に答える
0

他の多くの提案と同様に、時間を指定しないため、SQLは代わりに00:00:00を使用します。DATEをDATEIMEと比較するには、DATETIMEをDATEに変換します。

SQLサーバーでこれを実現する方法はわかりませんが、MySQLでは次のようになります:select companyname、exporteddate from mytable DATE(exporteddate)= '2011-08-01'

于 2011-09-23T19:22:34.877 に答える
0

時刻が指定されていない日時フィールドは、時刻が 00:00:00 の日付として解釈されます。

于 2011-09-23T19:19:00.040 に答える
0

指定しない限り、時間部分は正確に 00:00:00 になるため、タイムスタンプのすべての秒が完全一致を防ぎます。

于 2011-09-23T19:19:25.563 に答える
0

これを試してください。両方の日付を同じ形式に変換して比較しています。

select companyname, exporteddate from mytable  CONVERT(VARCHAR,exporteddate ,103)= 

CONVERT(VARCHAR,'2011-08-01',103);
于 2011-09-23T19:25:49.103 に答える