SQLで日付を比較する方法は?

データベーステーブルで日付属性を作成しましたが、そのタイプをvarcharに設定しました。 Date。私の質問は、SQLクエリでそのような日付を比較することはできますか?

DBの日付は次の形式で保存されます:

dd / mm / yyyy hh:mm:ss

PHPで次のようなSQLクエリを実行する必要があります。

SELECT * FROM DBtable WHERE DBname="$name" AND date>="31/01/2015" AND date<="31/09/2015"; 

“date”は次のようになります:07/08/2015 15:15:02

方法の例をいただければ幸いですこれを行うには。

コメント

  • 編集および質問にタグを付けして、使用しているデータベース製品(MySQLやバージョンなど)をお知らせください。また、日付を文字列ではなくdatesとして保存する方が常に良いので、テーブル定義を今すぐ変更できない理由はありますか?それとも、それを行うための支援を求めていますか?
  • date属性をdatetimeに変更できますか?日付をvarcharとして保存するのは問題があります。有効な日付ではないデータが保存される状況に遭遇します。また、日時との間で継続的に変換します。

回答

使用しているデータベースに応じて、文字列を日付にキャストしてから比較できるはずです。

ie SQLServerで

cast(date as datetime) >= "20150131" ... 

そうは言っても、可能な限り日付を日付として保存することをお勧めします。文字列を使用する必要がある場合は、より標準化された形式を使用するのが最善です

ieたとえば、簡単に組み合わせることができる"mm/dd/YYYY"の代わりに"YYYY-mm-dd"またはさらに優れた"YYYYmmdd"多くの文化で一般的な"dd/mm/YYYY"を使用します。このブログ投稿を参照してください:キックする悪い習慣:日付/範囲クエリの誤った処理

コメント

  • そして'は通常、日付に標準のfromatを使用することをお勧めします。たとえば、'YYYY-mm-dd'またはそれ以上の'YYYYmmdd'であり、あいまいでSQL-Serverによる解釈がローカル設定に依存する'mm/dd/YYYY'ではありません。
  • @ypercube、同意しました、更新されました。

回答

「どのデータベースを使用していますか?」という質問があります。

各RDBMSには、問題を処理する独自の方法があります。

MySQLの場合はstr_to_dateを使用します:

https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date

これにより、varcharが日付に変換され、日付を正しく並べ替えることができます。日付をvarcharデータ型として並べ替えると、予期しない動作が発生します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です