MySQL對日期時間型別的處理和限制

2021-08-27 14:27:08 字數 1580 閱讀 5126

如果表示時間值的date和時間型別為datetime、date、timestamp、time和year。每個時間型別有乙個有效值範圍和乙個「零」值,當指定不合法的mysql不能表示的值時使用「零」值。

如果試圖插入乙個不合法的日期,mysql將給出警告或錯誤。可以使用allow_invalid_dates sql模式讓mysql接受某些日期,例如'1999-11-31'。當你想要儲存乙個「可能錯誤的」使用者已經在資料庫中指定(例如,以web形式)用於將來處理的值時很有用。在這種模式下,mysql只驗證月範圍為從0到12,日範圍為從0到31。這些範圍可以包括零,因為mysql允許在date或datetime列儲存日/月和日是零的日期。這在應用程式需要儲存乙個你不知道確切日期的生日時非常有用。在這種情況下,只需要將日期儲存為'1999-00-00'或'1999-01-00'。如果儲存此類日期,date_sub()或date_add等需要完整日期的函式不會得到正確的結果。(如果你不想在日期中出現零,可以使用no_zero_in_date sql模式)。

mysql還允許將'0000-00-00'儲存為「偽日期」(如果不使用no_zero_date sql模式)。這在某些情況下比使用null值更方便(並且資料和索引占用的空間更小)。

將sql_mode系統變數設定為相應模式值,可以更確切你想讓mysql支援哪種日期。

當使用日期和時間型別時應記住以下幾點:

·mysql以標準輸出格式檢索給定日期或時間型別的值,但它盡力解釋你指定的各種輸入值格式(例如,當你指定乙個分配給或與日期或時間型別進行比較的值時)。只支援下面描述的格式。期望你能提供有效值。如果你使用其它格式的值會發生意想不到的結果。

·包含兩位年值的日期會令人模糊,因為世紀不知道。mysql使用以下規則解釋兩位年值:

70-99範圍的年值轉換為1970-1999。

00-69範圍的年值轉換為2000-2069。

·儘管mysql嘗試解釋幾種格式的值,日期總是以年-月-日順序(例如,'98-09-04'),而不是其它地方常用的月-日-年或日-月-年順序(例如,'09-04-98','04-09-98')。

·如果值用於數值上下文中,mysql自動將日期或時間型別的值轉換為數字,反之亦然。

·當 mysql遇到乙個日期或時間型別的超出範圍或對於該型別不合法的值時(如本節開始所描述),它將該值轉換為該類的「零」值。

乙個例外是超出範圍的time值被裁剪到time範圍的相應端點。

下面的表顯示了各類「零」值的格式。請注意如果啟用no_zero_date sql模式,使用這些值會產生警告。

列型別 「零」值

datetime '0000-00-00 00:00:00'

date '0000-00-00'

timestamp 00000000000000

time '00:00:00'

year 0000

·「零」值是特殊值,但你可以使用表內顯示的值顯式儲存或引用它們。你也可以使用值'0'或0來儲存或引用,寫起來更容易。

·myodbc中使用的「零」日期或時間值在myodbc 2.50.12和以上版本中被自動轉換為null,因為odbc不能處理此類值。

python對日期時間處理

python處理時間的模組有三個 datetime,time,calendar datetime模組主要是用來表示日期的,就是我們常說的年月日時分秒,calendar模組主要是用來表示年月日,是星期幾之類的資訊,time模組主要側重點在時分秒,粗略從功能來看,我們可以認為三者是乙個互補的關係,各自專...

mysql對日期的操作 MySql對日期的操作

1 計算倆個日期之間所差的天數 2 計算日期是這週的星期幾 select dayofweek 2018 09 18 1.因為外國一般都是把星期天認為是一周的開始,所以用這種方法一般都得減去一天才是這週的星期幾 2.這種方法是直接獲取當天是週幾 s,s 兩位數字形式的秒 00,01,59 i 兩位數字...

pandas 對日期型別資料的處理

pandas 的日期 時間型別有如下幾種 concept scalar class array class pandas data type primary creation method date times timestamp datetimeindex datetime64 ns or dat...