私は SQL Server 2000 で T-SQL を使用しており、この質問に関係のない他の多くの列の中で、DateTime として定義されTRANSACTIONS
た日付列を持つテーブルがあります..TRANDATE
テーブルには、何年にもわたるトランザクションが入力されています。私は混乱しているコード、テストに出くわしました。SELECT
次のような単純なものがあります。
SELECT TRANDATE, RECEIPTNUMBER FROM TRANSACTIONS WHERE TRANDATE BETWEEN '12/01/2010' and '12/31/2010' ORDER BY TRANDATE
そのテーブルにあることがわかっている2行のデータが返されません。
上記のステートメントでは、返される最後の行は、順番に次のようになりますTRANDATE
: 2010-12-31 00:00:00.000
以下のようにステートメントを変更すると、そのテーブルにある 2010 年 12 月の追加の 2 行が取得されます。
SELECT TRANDATE, RECEIPTNUMBER FROM TRANSACTIONS WHERE TRANDATE BETWEEN '12/01/2010 00:00:00' and '12/31/2010 23:59:59' ORDER BY TRANDATE
上記BETWEEN
の最初SELECT
の . SELECT
また、正しい行数を取得するために、2 番目の変更されたステートメントのように、ステートメントに明示的な時間を追加する必要があるのはなぜでしょうか?
方法TRANDATE
が「 」と定義されているためDATETIME
でしょうか。
この発見に基づいて、これらのBETWEEN
オペレーターはこの古いシステム全体に散らばっており、すべてのデータを適切にプルしていないように見えるため、この古いコードをすべて実行する必要があると思います。最初に何人かの人々からの説明が欲しかっただけです。ありがとう!