Mysql
如何在mysql中選擇不同格式的日期
我有這張表,但我無法將其格式更改為,
yyyy-mm-dd
因為我有很多與此格式相關的腳本dd-mm-yyyy
。如果我改變它的格式,那將是一團糟。Id date 1 01-07-2014 2 02-07-2014 3 03-07-2014 4 05-07-2014 5 07-07-2014 6 14-07-2014 7 18-07-2014 8 19-07-2014 9 21-07-2014 10 01-08-2014 11 02-08-2014 12 03-08-2014
在 php 文件上
$from = '01-07-2014'; $to = '02-08-2014';
我需要將 01-07-2014 和 01-09-2014 之間的所有日期的一些值更新為 format
dd-mm-yyyy
。我在用
UPDATE successlog SET successlog.overtime ='00:00' WHERE date >= '$from' AND date <= '$to'
它不工作。我嘗試使用 和 之間的
$from
鍵$to
。這也不起作用。當格式為 yyyy-mm-dd 時,它可以正常工作,但在我將格式更改為 dd-mm-yyyy 後,它無法正常工作。
你必須咬蘋果。在不更改任何腳本的情況下,您無法進行適當的比較。
STR_TO_DATE()
通過使用以下函式,您可以免去調整腳本生成日期的麻煩:UPDATE successlog SET successlog.overtime ='00:00' Where date >= STR_TO_DATE('$from', '%d-%m-%Y') AND date <= STR_TO_DATE('$to', '%d-%m-%Y')
但你必須以某種方式調整你的腳本。將日期以正確的數據類型儲存在數據庫中!
- 閱讀更多關於
str_to_date()
這裡。
如果我是你,我會使用視圖通過 DATE_FORMAT 函式轉換日期:
http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format
https://dev.mysql.com/doc/refman/5.7/en/create-view.html
為避免重構您的 SELECT,請將表重命名,並使用視圖的原始名稱。只要您像這樣保持視圖簡單,它在任何東西上的性能都會與物理表(可忽略不計的成本)一樣好,除了可能在該日期欄位上享有索引的任何東西。
因為 DATE_FORMAT 函式使視圖不可寫,所以您仍然必須重構您的寫語句以使用 DATE_FORMAT 以另一種方式。