データベーステーブルで日付属性を作成しましたが、そのタイプを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
方法の例をいただければ幸いですこれを行うには。
コメント
回答
使用しているデータベースに応じて、文字列を日付にキャストしてから比較できるはずです。
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データ型として並べ替えると、予期しない動作が発生します。
dates
として保存する方が常に良いので、テーブル定義を今すぐ変更できない理由はありますか?それとも、それを行うための支援を求めていますか?