Mysql

如何在mysql中選擇不同格式的日期

  • March 12, 2022

我有這張表,但我無法將其格式更改為,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 以另一種方式。

引用自:https://dba.stackexchange.com/questions/75957