次のシナリオを考えてみましょう。 - 検索クエリと一致する1つ以上のフィールドでレコードを取得する着信Ajax要求を受け取るPHPサーバーがあります。MySQL - 可変日付フォーマットとカスタムフィールドの日付による照会
システムは、異なるサーバー間で展開され、以下のように、異なる日付形式を有することができる。
クライアント1(欧州) - 日付形式22-02-2016(DD-MM-YYYY)は
クライアント2(米国) - 日付形式02-22-2016(mm-dd-yyyy)
*各クライアントは管理パネルで独自のカスタム日付&の時刻形式を設定できます。
だから、クエリがいずれであってもよい:プロットが厚くなるのはここ
{"first_name": "john","order_date":"22-02-2016"}
または
{"first_name": "john","order_date":"02-22-2016"}
あるいは
{"first_name": "john","order_date":"2016-02-22"}
がある - システムは、また、そのためのカスタムフィールドサポートクエリは次のようにすることもできます。
{"first_name": "john","custom_field":"22-02-2016"}
ここでcustom_field
はデータベースにDATEフィールドとして格納されていますが、PHPサーバはどのフィールドタイプであるかわかりません(技術的にはこの情報は取得できますが、現在は避けようとしています)。
custom_field
が日付フィールドであるかどうかを明示的に知らなくても、データベースクエリを実行できるようにしたいと考えています。
理想的には、クライアントのフォーマットに基づいて日付を比較するためにデータベースで使用される形式を変更することができます。つまり、クエリに日付フィールドが含まれている場合、指定された形式を使用するように指定できます。または、テーブル/データベーススキーマでグローバルに変更します。
私の代わりに、リクエストを繰り返し、各日付フィールドをクライアント形式からMySQL形式に変換するか、または正規表現を使用してクエリ日付を変換します。しかし、可能であればデータベースレベルでそれをむしろ解決する方がはるかです。
すべての日付にISO 8601標準形式(YYYY-MM-DDなど)が渡されるようにAPIを修正する必要があります。 –
@ GordonLinoffありがとう、私は何を恐れていたのだろうか。これをデータベースレベルで行う方法はありませんか? – Yani
個人的に私はUnixのタイムスタンプに行きます。より迅速なクエリと、フロントエンドでの操作が簡単です。 – Brian