請考慮以下情形 - 我有一臺PHP服務器接收傳入的Ajax請求,以通過匹配搜索查詢的1個或多個字段檢索記錄。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
其中custom_field
存儲在數據庫中的日期字段,但PHP服務器不知道它是哪種字段類型(技術上我可以檢索此信息,但現在試圖避免它)。
我希望能夠運行數據庫查詢,但不明確知道custom_field
是否爲日期字段,並且仍支持不同的格式。
理想情況下,我可以根據客戶端格式更改數據庫使用的格式來比較日期,即我可以告訴MySQL如果查詢包含日期字段,則使用給定的格式。或者在表/數據庫模式中全局更改它。
我的選擇是遍歷請求並將每個日期字段從客戶端格式轉換爲MySQL格式或使用正則表達式來轉換查詢日期。但是,如果可能的話,我寧願在數據庫級別解決它。
您應該修復API,以便所有日期均以ISO 8601標準格式(如YYYY-MM-DD)傳遞。 –
@GordonLinoff謝謝,那是我害怕我必須要做的。在數據庫級別沒有辦法做到這一點嗎? – Yani
就我個人而言,我會使用Unix時間戳。更快的查詢和更容易操作的前端。 – Brian