最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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());
 
-- 獲取當(dāng)前時(shí)間的函數(shù)
select CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME;	-- 當(dāng)前時(shí)間
select CURRENT_TIMESTAMP(), CURRENT_DATE(), CURRENT_TIME(), CURDATE(), CURTIME();	-- 當(dāng)前時(shí)間
select now(), sysdate(), SLEEP(3), now(), sysdate();	-- 當(dāng)前時(shí)間
select UTC_TIMESTAMP(), UTC_DATE(), UTC_TIME();	-- UTC時(shí)間
select UNIX_TIMESTAMP(), UNIX_TIMESTAMP(now());-- 函數(shù)返回連接當(dāng)前時(shí)區(qū)內(nèi)的值(時(shí)間戳)
select FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y-%m-%d %H:%i:%s'); -- 時(shí)間戳格式化
select DATE_FORMAT(now(),'%Y-%m-%d %H:%i:%s'); -- 時(shí)間格式化

-- ----------------- 補(bǔ)充日期操作
/* 對日期進(jìn)行 加減(兩個(gè)函數(shù)記一個(gè)即可)
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);
-- 復(fù)合型:加1年1月
select DATE_ADD(now(),INTERVAL '1 1' YEAR_MONTH), DATE_SUB(now(),INTERVAL '-1 -1' YEAR_MONTH);
-- 加1天2時(shí)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);

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

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

本文基于MySQL 5.7版本。

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

(1)DATE

(2)TIME

(3)DATETIME

(4)TIMESTAMP

(5)YEAR

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

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

type_name(fsp),

其中type_name是TIME、DATETIME或TIMESTAMP,而fsp是小數(shù)秒精度,fsp的值,如果給定,必須在0 ~ 6之間。值為0表示沒有小數(shù)部分。如果省略,默認(rèn)精度為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'的字符串。任何標(biāo)點(diǎn)字符都可以用作日期部分之間的分隔符。例如,'2012-12-31'、'2012/12/31'、'2012^12^31'和'2012@12@31'是等價(jià)的。

(2)格式為'YYYYMMDD'或'YYMMDD'的沒有分隔符的字符串,只要該字符串具有日期的意義。例如,'20070523'和'070523'被解釋為'2007-05-23',但'071332'是非法的(它有無意義的月和日部分),會(huì)變成'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列都可以具有自動(dòng)初始化和更新屬性。

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

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

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

(4)格式為'YYYYMMDDhhmmss'或'YYMMDDhhmmss'無分隔符的字符串,只要該字符串具有日期的意義。例如,'20070523091528'和'070523091528'被解釋為'2007-05-23 09:15:28',但'071122129015'是非法的(它有一個(gè)無意義的分鐘部分),會(huì)變成'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指的是世界標(biāo)準(zhǔn)時(shí)間),TIMESTAMP值存儲(chǔ)為自紀(jì)元('1970-01-01 00:00:00' UTC)以來的秒數(shù),但是它不能表示'1970-01-01 00:00:00',因?yàn)檫@表示從紀(jì)元開始的0秒,值0保留用于表示“0000-00-00 00:00:00”,即“零”的TIMESTAMP值。TIMESTAMP的字面常量同DATETIME。

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

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

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

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

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

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

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

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

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

再次查看時(shí)間戳,如圖:

 ts列已經(jīng)更新為當(dāng)前時(shí)間戳。這和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í),插入數(shù)據(jù)時(shí),如果ts沒有指定值,會(huì)被初始化為默認(rèn)值,更新數(shù)據(jù)時(shí),ts列同時(shí)更新。 explicit_defaults_for_timestamp處于打開狀態(tài),不會(huì)被初始化為默認(rèn),也不具備自動(dòng)更新為當(dāng)前時(shí)間戳。也可以對TIMESTAMP和DATETIME如下顯示定義默認(rèn)值和自動(dòng)更新:

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類型這個(gè)時(shí)間范圍表明它不僅可以表示一天的時(shí)間,也可以表示經(jīng)過的時(shí)間或兩個(gè)事件之間的時(shí)間間隔。字面常量轉(zhuǎn)換規(guī)則如下:

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

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

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

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

YEAR和YEAR(4)

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

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

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會(huì)將無效的YEAR值轉(zhuǎn)換為0000。在嚴(yán)格SQL模式下,試圖插入無效的YEAR值將產(chǎn)生錯(cuò)誤。

總結(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ù)點(diǎn).只識(shí)別小數(shù)點(diǎn).只識(shí)別小數(shù)點(diǎn).
日期分隔符任何標(biāo)點(diǎn)任何標(biāo)點(diǎn)任何標(biāo)點(diǎn)
時(shí)間分隔符任何標(biāo)點(diǎn)任何標(biāo)點(diǎn)任何標(biāo)點(diǎn)
無效值處理(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

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

相關(guān)文章

  • MySQL日期及時(shí)間字段的查詢

    MySQL日期及時(shí)間字段的查詢

    這篇文章主要介紹了MySQL日期及時(shí)間字段的查詢,一分享日期及時(shí)間字段的規(guī)范化查詢方法為主展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • mysql數(shù)據(jù)庫詳解(基于ubuntu 14.0.4 LTS 64位)

    mysql數(shù)據(jù)庫詳解(基于ubuntu 14.0.4 LTS 64位)

    這篇文章主要介紹了mysql數(shù)據(jù)庫詳解(基于ubuntu 14.0.4 LTS 64位),具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • MySQL order by實(shí)現(xiàn)原理分析和Filesort優(yōu)化方式

    MySQL order by實(shí)現(xiàn)原理分析和Filesort優(yōu)化方式

    這篇文章主要介紹了MySQL order by實(shí)現(xiàn)原理分析和Filesort優(yōu)化方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • MySQL中登錄與退出超全圖文講解

    MySQL中登錄與退出超全圖文講解

    大多數(shù)人都認(rèn)為在不需要事務(wù)化處理的情況下,MySQL是管理內(nèi)容最好的選擇,下面這篇文章主要給大家介紹了關(guān)于MySQL中登錄與退出圖文講解的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Mysql索引類型與基本用法實(shí)例分析

    Mysql索引類型與基本用法實(shí)例分析

    這篇文章主要介紹了Mysql索引類型與基本用法,結(jié)合實(shí)例形式分析了Mysql索引類型中普通索引、唯一索引、主鍵索引、組合索引、全文索引基本概念、原理與使用方法,需要的朋友可以參考下
    2020-06-06
  • 一文搞懂MySQL索引頁結(jié)構(gòu)

    一文搞懂MySQL索引頁結(jié)構(gòu)

    本文主要介紹了MySQL索引頁結(jié)構(gòu),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • mysql中varchar類型的日期進(jìn)行比較、排序等操作的實(shí)現(xiàn)

    mysql中varchar類型的日期進(jìn)行比較、排序等操作的實(shí)現(xiàn)

    在mysql使用過程中,日期一般都是以datetime、timestamp等格式進(jìn)行存儲(chǔ)的,但有時(shí)會(huì)因?yàn)樘厥獾男枨蠡驓v史原因,日期的存儲(chǔ)格式是varchar,那么應(yīng)該怎么進(jìn)行比較和排序等問題,本文就來介紹一下
    2021-11-11
  • 聊聊MySQL事務(wù)的特性和隔離級(jí)別

    聊聊MySQL事務(wù)的特性和隔離級(jí)別

    這篇文章主要介紹了MySQL事務(wù)的特性和隔離級(jí)別的相關(guān)資料,幫助大家粗略的認(rèn)識(shí)下MySQL 事務(wù)的相關(guān)知識(shí),感興趣的朋友可以了解下
    2020-09-09
  • 教你解決往mysql數(shù)據(jù)庫中存入漢字報(bào)錯(cuò)的方法

    教你解決往mysql數(shù)據(jù)庫中存入漢字報(bào)錯(cuò)的方法

    這篇文章主要介紹了Mysql基礎(chǔ)之教你解決往數(shù)據(jù)庫中存入漢字報(bào)錯(cuò)的方法,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)mysql的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • MySQL數(shù)據(jù)庫查詢排序方式

    MySQL數(shù)據(jù)庫查詢排序方式

    這篇文章主要介紹了MySQL數(shù)據(jù)庫查詢排序方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評(píng)論

广汉市| 元朗区| 林周县| 都匀市| 定结县| 富阳市| 潼关县| 莱西市| 清徐县| 广河县| 灌南县| 涟源市| 班玛县| 静海县| 勃利县| 崇义县| 红河县| 霸州市| 泌阳县| 通江县| 图木舒克市| 西乡县| 界首市| 呈贡县| 新绛县| 五河县| 库尔勒市| 卫辉市| 竹溪县| 田东县| 宝兴县| 浦江县| 怀来县| 山阳县| 通化市| 吉安县| 河池市| 景泰县| 沂南县| 黑山县| 长岭县|