欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL中關(guān)于datetime、date、time、str之間的轉(zhuǎn)化與比較

 更新時間:2022年10月01日 09:09:31   作者:nacrt  
這篇文章主要介紹了MySQL中關(guān)于datetime、date、time、str之間的轉(zhuǎn)化與比較,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

datetime、date、time、str之間的轉(zhuǎn)化與比較

SELECT NOW(),CURDATE(),CURTIME(),
  -- datetime 轉(zhuǎn) date time
  NOW(), DATE(NOW()), TIME (NOW()), CONCAT(DATE(NOW()), ' ', TIME (NOW())),
  -- str 轉(zhuǎn) datetime date time
  str_to_date('2019-04-25 08:50:00', '%Y-%m-%d %H:%i:%s'),DATE('2019-04-25 08:50:00'),TIME ('2019-04-25 08:50:00'),
  str_to_date('2019-04-25 08:50:00', '%Y-%m-%d %T'),
  -- 比較
  NOW() = CONCAT(DATE(NOW()), ' ', TIME (NOW())),
  DATE(NOW()) = '2019-04-25',
  NOW() = DATE(NOW()),
  NOW() = TIME (NOW());
 
-- 獲取當前時間的函數(shù)
select CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME;	-- 當前時間
select CURRENT_TIMESTAMP(), CURRENT_DATE(), CURRENT_TIME(), CURDATE(), CURTIME();	-- 當前時間
select now(), sysdate(), SLEEP(3), now(), sysdate();	-- 當前時間
select UTC_TIMESTAMP(), UTC_DATE(), UTC_TIME();	-- UTC時間
select UNIX_TIMESTAMP(), UNIX_TIMESTAMP(now());-- 函數(shù)返回連接當前時區(qū)內(nèi)的值(時間戳)
select FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y-%m-%d %H:%i:%s'); -- 時間戳格式化
select DATE_FORMAT(now(),'%Y-%m-%d %H:%i:%s'); -- 時間格式化

-- ----------------- 補充日期操作
/* 對日期進行 加減(兩個函數(shù)記一個即可)
DATE_ADD(date,INTERVAL expr type);
DATE_SUB(date,INTERVAL expr type);
type取值:YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、YEAR_MONTH、DAY_SECOND 等等
*/
-- 加1天
select DATE_ADD(now(),INTERVAL 1 DAY), DATE_SUB(now(),INTERVAL -1 DAY);
-- 復合型:加1年1月
select DATE_ADD(now(),INTERVAL '1 1' YEAR_MONTH), DATE_SUB(now(),INTERVAL '-1 -1' YEAR_MONTH);
-- 加1天2時3分4秒
select DATE_ADD('2020-12-23 00:00:00',INTERVAL '1 2:3:4' DAY_SECOND),DATE_SUB('2020-12-23 00:00:00',INTERVAL '-1 -2:-3:-4' DAY_SECOND);

/* 獲取兩個日期之間的差值(datetime_expr2-datetime_expr1的值)
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
unit:差值的單位,取值:FRAC_SECOND(低版本不支持)、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER或YEAR
*/
-- 查詢兩個日期間的差值(單位秒)
select TIMESTAMPDIFF(SECOND,'2020-12-01 00:00:00','2020-12-01 01:01:01');

MySQL日期和時間數(shù)據(jù)類型(DATE、TIME、 DATETIME、 TIMESTAMP和YEAR

本文基于MySQL 5.7版本。

MySQL中表示時間值的日期和時間數(shù)據(jù)類型有以下五個:

(1)DATE

(2)TIME

(3)DATETIME

(4)TIMESTAMP

(5)YEAR

日期和時間數(shù)據(jù)類型語法

MySQL允許對TIME、DATETIME和TIMESTAMP使用小數(shù)秒,精度最高可達微秒(6位小數(shù))。要定義包含小數(shù)秒日期和時間數(shù)據(jù)類型的列,使用

type_name(fsp),

其中type_name是TIME、DATETIME或TIMESTAMP,而fsp是小數(shù)秒精度,fsp的值,如果給定,必須在0 ~ 6之間。值為0表示沒有小數(shù)部分。如果省略,默認精度為0。

例如:

CREATE TABLE date_time_test (t TIME(3), dt DATETIME(6), ts TIMESTAMP(0));

Date

支持的范圍 '1000-01-01' to '9999-12-31',MySQL以'YYYY-MM-DD'格式顯示Date類型,但允許使用字符串或數(shù)字將值賦給DATE列。字面常量轉(zhuǎn)換規(guī)則如下:

(1)格式為'YYYY-MM-DD'或'YY-MM-DD'的字符串。任何標點字符都可以用作日期部分之間的分隔符。例如,'2012-12-31'、'2012/12/31'、'2012^12^31'和'2012@12@31'是等價的。

(2)格式為'YYYYMMDD'或'YYMMDD'的沒有分隔符的字符串,只要該字符串具有日期的意義。例如,'20070523'和'070523'被解釋為'2007-05-23',但'071332'是非法的(它有無意義的月和日部分),會變成'0000-00-00'。

(3)作為YYYYMMDD或YYMMDD格式的數(shù)字,只要該數(shù)字作為日期有意義。例如,19830905和830905被解釋為“1983-09-05”。

DATETIME和DATETIME(fsp)

DATETIME類型是Date和Time的組合。支持的范圍從'1000-01-01 00:00:00.000000' 到'9999-12-31 23:59:59.999999'。MySQL以'YYYY-MM-DD hh:mm:ss[.fraction]'的格式顯示DATETIME類型。但允許使用字符串或數(shù)字向DATETIME列賦值。字面常量轉(zhuǎn)換規(guī)則如下:

表中的任何TIMESTAMP或DATETIME列都可以具有自動初始化和更新屬性。

(1)格式為“YYYY-MM-DD hh:mm:ss”或“YY-MM-DD hh:mm:ss”字符串。任何標點字符都可以用作日期部分或時間部分之間的分隔符。例如,'2012-12-31 11:30:45'、'2012^12^31 11+30+45'、'2012/12/31 11*30*45'和'2012@12@31 11^30^45'是等價的。

(2)在日期和時間部分和小數(shù)秒部分之間識別的唯一分隔符是小數(shù)點。

(3)日期和時間部分可以用T而不是空格分隔。例如,'2012-12-31 11:30:45' '2012-12-31 t11:30:45 '是等價的。

(4)格式為'YYYYMMDDhhmmss'或'YYMMDDhhmmss'無分隔符的字符串,只要該字符串具有日期的意義。例如,'20070523091528'和'070523091528'被解釋為'2007-05-23 09:15:28',但'071122129015'是非法的(它有一個無意義的分鐘部分),會變成'0000-00-00 00:00:00'。

(5)YYYYMMDDhhmmss或YYMMDDhhmmss格式的數(shù)字,只要該數(shù)字作為日期有意義。例如,19830905132800和830905132800被解釋為“1983-09-05 13:28:00”。

TIMESTAMP和TIMESTAMP[(fsp)]

支持的范圍'1970-01-01 00:00:01.000000' UTC to '2038-01-19 03:14:07.999999' UTC(UTC指的是世界標準時間),TIMESTAMP值存儲為自紀元('1970-01-01 00:00:00' UTC)以來的秒數(shù),但是它不能表示'1970-01-01 00:00:00',因為這表示從紀元開始的0秒,值0保留用于表示“0000-00-00 00:00:00”,即“零”的TIMESTAMP值。TIMESTAMP的字面常量同DATETIME。

上面date_time_test表ts列是TIMESTAMP,一旦創(chuàng)建后,我們發(fā)現(xiàn)ts列默認值為當前TIMESTAMP,而且可自動更新為當前時間戳,如圖: 

支持的范圍'1970-01-01 00:00:01.000000' UTC to '2038-01-19 03:14:07.999999' UTC(UTC指的是世界標準時間),TIMESTAMP值存儲為自紀元('1970-01-01 00:00:00' UTC)以來的秒數(shù),但是它不能表示'1970-01-01 00:00:00',因為這表示從紀元開始的0秒,值0保留用于表示“0000-00-00 00:00:00”,即“零”的TIMESTAMP值。TIMESTAMP的字面常量同DATETIME。

上面date_time_test表ts列是TIMESTAMP,一旦創(chuàng)建后,我們發(fā)現(xiàn)ts列默認值為當前TIMESTAMP,而且可自動更新為當前時間戳,如圖:

向date_time_test表中插入一條數(shù)據(jù),如下: 

insert date_time_test(t) values('00:00:01');

查看數(shù)據(jù),如圖:

發(fā)現(xiàn)ts列自動更新為插入數(shù)據(jù)時的時間戳。

更新當前數(shù)據(jù),如圖:

update date_time_test set t='00:00:02' where t='00:00:01';

再次查看時間戳,如圖:

 ts列已經(jīng)更新為當前時間戳。這和MySQL的系統(tǒng)變量explicit_defaults_for_timestamp有關(guān),

show variables like 'explicit_defaults_for_timestamp';

如圖:

explicit_defaults_for_timestamp處于關(guān)閉狀態(tài),此時,插入數(shù)據(jù)時,如果ts沒有指定值,會被初始化為默認值,更新數(shù)據(jù)時,ts列同時更新。 explicit_defaults_for_timestamp處于打開狀態(tài),不會被初始化為默認,也不具備自動更新為當前時間戳。也可以對TIMESTAMP和DATETIME如下顯示定義默認值和自動更新:

CREATE TABLE t1 (
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

TIME和TIME(fsp)

支持的范圍'-838:59:59.000000' to '838:59:59.000000',MySQL以'hh:mm:ss[.fraction]'格式顯示TIME,但允許使用字符串或數(shù)字向TIME列賦值。TIME類型這個時間范圍表明它不僅可以表示一天的時間,也可以表示經(jīng)過的時間或兩個事件之間的時間間隔。字面常量轉(zhuǎn)換規(guī)則如下:

(1)MySQL將帶有冒號的TIME值縮寫為一天中的時間,例如:'11:12'表示'11:12:00',而不是 '00:11:12';

(2)MySQL將沒有冒號的TIME縮寫值最右邊的兩個數(shù)字看成秒,例如:'1112'和1112都表示'00:11:12'

(3)在時間部分和小數(shù)秒部分之間識別的唯一分隔符是小數(shù)點;

(4)默認情況下,位于TIME范圍之外但在其他方面有效的值將被裁剪到該范圍中最近的端點。例如,'-850:00:00'和'850:00:00'會轉(zhuǎn)換為'-838:59:59'和'838:59:59'。無效的TIME值將被轉(zhuǎn)換為“00:00:00”。注意,由于'00:00:00'本身是一個有效的TIME值,因此無法從存儲在表中的'00:00:00'值判斷原始值是'00:00:00'還是無效的。

YEAR和YEAR(4)

支持的范圍1901到2155,或者0000。MySQL以YYYY格式顯示YEAR。但允許使用字符串或數(shù)字向YEAR列賦值。

SUM()和AVG()聚合函數(shù)不能處理時間值。要解決這個問題,請將其轉(zhuǎn)換為數(shù)字,然后執(zhí)行聚合操作,最后將其轉(zhuǎn)換回時間值。例子:

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;

YEAR接受如下格式的輸入:

(1)4位字符串'1901' 到 '2155';

(2)4位數(shù)字1901 到 2155;

(3)1或者2位字符串'0' 到 '99',MySQL將'0'到'69'轉(zhuǎn)化為2000到2069,將'70'到'99'轉(zhuǎn)化為1970到1999;

(4)1或者2位數(shù)字0到 99,MySQL將1到69轉(zhuǎn)換為YEAR值2001到2069,將70到99轉(zhuǎn)化為YEAR值1970到1999,0轉(zhuǎn)化為YEAR值0000。

注:

如果沒有啟用strict SQL模式,MySQL會將無效的YEAR值轉(zhuǎn)換為0000。在嚴格SQL模式下,試圖插入無效的YEAR值將產(chǎn)生錯誤。

總結(jié)如下:

 DATETIMEDATETIMETIMESTAMPYEAR
取值范圍

'1000-01-01'

'9999-12-31'

'-838:59:59.000000'

'838:59:59.000000'

'1000-01-01 00:00:00.000000' 到

'9999-12-31 23:59:59.999999'

'1970-01-01 00:00:01.000000' UTC to

'2038-01-19 03:14:07.999999' UTC

1901

2155

或者0000

小數(shù)位精度00~60~60~60
顯示格式YYYY-MM-DDhh:mm:ss[.fraction]YYYY-MM-DD hh:mm:ss[.fraction]YYYY-MM-DD hh:mm:ss[.fraction]YYYY
賦值允許使用符合格式的字符串或數(shù)字賦值允許使用符合格式的字符串或數(shù)字賦值允許使用符合格式的字符串或數(shù)字賦值允許使用符合格式的字符串或數(shù)字賦值允許使用符合格式的字符串或數(shù)字賦值
小數(shù)位分隔符只識別小數(shù)點.只識別小數(shù)點.只識別小數(shù)點.
日期分隔符任何標點任何標點任何標點
時間分隔符任何標點任何標點任何標點
無效值處理(strict mode關(guān)閉狀態(tài))

轉(zhuǎn)化為

0000-00-00

轉(zhuǎn)化為

0000-00-00 00:00:00

轉(zhuǎn)化為

0000-00-00 00:00:00

轉(zhuǎn)換為

00:00:00

轉(zhuǎn)換為0000

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 數(shù)據(jù)從MySQL遷移到Oracle 需要注意什么

    數(shù)據(jù)從MySQL遷移到Oracle 需要注意什么

    將數(shù)據(jù)從MySQL遷移到Oracle,大家需要注意什么?Oracle移植到mysql,又需要注意什么?如何有效解決移植過程的問題,為了數(shù)據(jù)庫的兼容性我們又該注意些什么?感興趣的小伙伴們可以參考一下
    2016-11-11
  • mysql 使用B+樹索引有哪些優(yōu)勢

    mysql 使用B+樹索引有哪些優(yōu)勢

    這篇文章主要介紹了mysql 使用B+樹索引有哪些優(yōu)勢,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-01-01
  • MySQL 查詢的排序、分頁相關(guān)

    MySQL 查詢的排序、分頁相關(guān)

    這篇文章主要介紹了MySQL 查詢的排序、分頁相關(guān)的相關(guān)知識,幫助大家更好的理解和使用數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-11-11
  • mysql性能優(yōu)化之索引優(yōu)化

    mysql性能優(yōu)化之索引優(yōu)化

    我們首先討論索引,因為它是加快查詢的最重要的工具。當然還有其他加快查詢的技術(shù),但是最有效的莫過于恰當?shù)厥褂盟饕?。下面我們就來介紹索引是什么、它怎樣改善查詢性能、索引在什么情況下可能會降低性能,以及怎樣為表選擇索引。
    2015-12-12
  • MySQL修改密碼的幾種方式

    MySQL修改密碼的幾種方式

    這篇文章主要介紹了MySQL修改密碼的幾種方式,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-12-12
  • 深入解析MySQL?事務(wù)

    深入解析MySQL?事務(wù)

    這篇文章主要給大家分享的是mysql事務(wù)解析,事務(wù)(transaction)是業(yè)務(wù)邏輯的一個基本的單元組成,下面文章圍繞mysql事務(wù)的相關(guān)資料展開詳細內(nèi)容,需要的朋友可以參考一下希望對大家有所幫助
    2022-01-01
  • MySQL實現(xiàn)MYISAM表批量壓縮的方法

    MySQL實現(xiàn)MYISAM表批量壓縮的方法

    這篇文章主要介紹了MySQL實現(xiàn)MYISAM表批量壓縮的方法,實例分析了MySQL使用shell命令批量壓縮MYISAM表的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • 分享15個Mysql索引失效的場景

    分享15個Mysql索引失效的場景

    這篇文章主要介紹了分享15個Mysql索引失效的場景,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • 磁盤寫滿導致MySQL復制失敗的解決方案

    磁盤寫滿導致MySQL復制失敗的解決方案

    這篇文章主要介紹了磁盤寫滿導致MySQL復制失敗的解決方案,幫助大家更好的理解和學習使用MySQL,感興趣的朋友可以了解下
    2021-04-04
  • master and slave have equal MySQL server UUIDs 解決方法

    master and slave have equal MySQL server UUIDs 解決方法

    使用rsync配置了大量mysql,省去了大量編譯和配置的時間,隨逐個修改master和slave服務(wù)器的my.cnf,后,發(fā)現(xiàn)數(shù)據(jù)不能同步
    2013-07-07

最新評論