MYSQL的DATE型別的使用

2021-05-23 02:49:11 字數 2325 閱讀 7437

date值的格式是'yyyy-mm-dd'。按照標準的sql,不允許其他格式。在update表示式以及select語句的where子句中應使用 該格式。

例如: 

mysql> select * from tbl_name where date >= '2003-05-05'; 

為了方便,如果日期是在數值環境下使用的,mysql會自動將日期轉換為數值(反之亦然)。它還具有相當的智慧型,在更新時或在與 timestamp、date或datetime列比較日期的where子句中,允許「寬鬆的」字串形式(「寬鬆形式」表示,任何標點字元均能用作各部 分之間的分隔符。例如,'2004-08-15'和'2004#08#15'是等同的)。

mysql還能轉換不含任何分隔符的字串(如 '20040815'),前體是它必須是有意義的日期。 

使用<、<=、=、>=、>、或between操作符將date、time、datetime或timestamp 與常量字串進行比較時,mysql通常會將字串轉換為內部長整數,以便進行快速比較(以及略為「寬鬆」的字串檢查)。但是,該轉換具有下述例外:

比較兩列時 將date、time、datetime或timestamp列與表示式進行比較時 使用其他比較方法時,如in或strcmp()。 對於這些例外情形,會將物件轉換為字串並執行字串比較,採用該方式進行比較。 為了保持安全,假定按字串比較字串,如果你打算比較臨時值和字串,將使用恰當的字串函式。 對於特殊日期'0000-00-00',能夠以'0000-00-00'形式儲存和檢索。

在myodbc中使用'0000-00-00'日期 時,對於myodbc 2.50.12或更高版本,該日期將被自動轉換為null,這是因為odbc不能處理這類日期。

由於mysql能夠執行前面所介紹的轉換,下述語句均能正常工作: 

mysql> insert into tbl_name (idate) values (19970505); 

mysql> insert into tbl_name (idate) values ('19970505'); 

mysql> insert into tbl_name (idate) values ('97-05-05'); 

mysql> insert into tbl_name (idate) values ('1997.05.05'); 

mysql> insert into tbl_name (idate) values ('1997 05 05'); 

mysql> insert into tbl_name (idate) values ('0000-00-00'); 

mysql> select idate from tbl_name where idate >= '1997-05-05'; 

mysql> select idate from tbl_name where idate >= 19970505; 

mysql> select mod(idate,100) from tbl_name where idate >= 19970505; 

mysql> select idate from tbl_name where idate >= '19970505'; 

但是,下述語句不能正常工作: 

mysql> select idate from tbl_name where strcmp(idate,'20030505')=0; 

strcmp()是一種字串函式,它能將idate轉換為'yyyy-mm-dd'格式的字串,並執行字串比較。它不能將 '20030505'轉換為日期'2003-05-05'並進行日期比較。 

如果你正在使用allow_invalid_dates sql模式,mysql允許以僅執行給定的有限檢查方式儲存日期:mysql僅保證天位於1~31的範圍內,月位於1~12的範圍內。 

這樣就使得mysql很適合於web應用程式,其中,你能獲得三個不同欄位中的年、月、日值,也能準確儲存使用者插入的值(無日期驗證)。 如果未使用no_zero_in_date sql模式,「天」和「月」部分可能為0。

如果你打算將生日儲存在date列而且僅知道部分日期,它十分方便。 如果未使用no_zero_date sql模式,mysql也允許你將'0000-00-00'儲存為「偽日期」。在某些情況下,它比使用null值更方便。 

如果無法將日期轉換為任何合理值,「0」將儲存在date列中,並被檢索為'0000-00-00'。這是兼顧速度和便利性的事宜。我們認 為,資料庫伺服器的職責是檢索與你儲存的日期相同的日期(即使在任何情況下,資料在邏輯上不正確也同樣)。

我們認為,對日期的檢查應由應用程式而不是服務 器負責。 如果你希望mysql檢查所有日期並僅接受合法日期(除非由ignore覆蓋),應將sql_mode設定 為"no_zero_in_date,no_zero_date"

ORACLE中date型別的使用

本文 csdn,作者 itwit 2015 4 2 對於很多人來說,oracle中的時間處理,向來是乙個很模糊的概念,我也是,記下來做參考。1.建立一張含日期型別的表 create table test user user id number 15 user name varchar2 30 sta...

ORACLE中date型別的使用

對於很多人來說,oracle中的時間處理,向來是乙個很模糊的概念,我也是,記下來做參考。1.建立一張含日期型別的表 create table test user user id number 15 user name varchar2 30 start date date,end date date...

Date日期型別的繫結

自定義型別的繫結 springmvc沒有提供預設的對日期型別的繫結,需要自定義日期型別的繫結 第一張圖是po類中日期屬性,第二張圖是頁面中日期屬性的內容,第三張是訪問出現400錯誤 因為日期的格式不固定,有年月日時分秒,也有可能設定為年月日,所以在引數繫結時需要自定義引數繫結 方法一 寫乙個自定義屬...