yyyy-MM-dd
会社の古い Crystal レポートを更新していると、ある範囲内の日付と別の範囲内の日付を検索していることを偶然発見しましたyyyyMMdd
。また、結果がわずかに異なることもわかったので、これをさらに調査し始めました。
データベース(MS SQL Serverで実行中)をチェックしたところ、検索対象のフィールドに日付が文字列yyyyMMdd
形式で保存されました。
yyyy-MM-dd
Crystal Reports によって作成された SQL クエリ の形式を使用するレポートには、
WHERE ("Remiss_ank"."Skapad_datum">='2013-07-01'
AND "Remiss_ank"."Skapad_datum"<='2013-07-31')
一方、この形式を使用するレポートには、yyyyMMdd
次を含む SQL クエリがあります。
WHERE ("Remiss_ank"."Skapad_datum">='20130701'
AND "Remiss_ank"."Skapad_datum"<='20130731')
データベース内のすべての日付はyyyyMMdd
形式で保存されているため、前者がまったく結果を返さないかどうかは理解できますが、実際には後者のサブセットが返されます。実際、最初のクエリは、20130702 から 20130731 の範囲の日付を持つすべてのレコードを返します。
この結果が表示される理由と、文字列2013-07-02
が文字列間隔の一部であると見なされる理由20130701
を20130731
誰かが説明できますか2013-07-01
?