久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL中datetime、date、time、str之間如何轉化

178次閱讀
沒有評論

共計 6331 個字符,預計需要花費 16 分鐘才能閱讀完成。

這篇文章主要介紹“MySQL 中 datetime、date、time、str 之間如何轉化”的相關知識,丸趣 TV 小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“MySQL 中 datetime、date、time、str 之間如何轉化”文章能幫助大家解決問題。

datetime、date、time、str 之間的轉化與比較

SELECT NOW(),CURDATE(),CURTIME(),
 -- datetime  轉  date time
 NOW(), DATE(NOW()), TIME (NOW()), CONCAT(DATE(NOW()),    , TIME (NOW())),
 -- str  轉  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());
 
--  獲取當前時間的函數
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());--  函數返回連接當前時區內的值(時間戳)select FROM_UNIXTIME(UNIX_TIMESTAMP(), %Y-%m-%d %H:%i:%s  --  時間戳格式化
select DATE_FORMAT(now(), %Y-%m-%d %H:%i:%s  --  時間格式化
-- -----------------  補充日期操作
/*  對日期進行   加減(兩個函數記一個即可)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 日期和時間數據類型(DATE、TIME、DATETIME、TIMESTAMP 和 YEAR

本文基于 MySQL 5.7 版本。

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

(1)DATE

(2)TIME

(3)DATETIME

(4)TIMESTAMP

(5)YEAR

日期和時間數據類型語法

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

type_name(fsp),

其中 type_name 是 TIME、DATETIME 或 TIMESTAMP,而 fsp 是小數秒精度,fsp 的值,如果給定,必須在 0 ~ 6 之間。值為 0 表示沒有小數部分。如果省略,默認精度為 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 類型,但允許使用字符串或數字將值賦給 DATE 列。字面常量轉換規則如下:

(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 格式的數字,只要該數字作為日期有意義。例如,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 類型。但允許使用字符串或數字向 DATETIME 列賦值。字面常量轉換規則如下:

表中的任何 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)在日期和時間部分和小數秒部分之間識別的唯一分隔符是小數點。

(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 格式的數字,只要該數字作為日期有意義。例如,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) 以來的秒數,但是它不能表示 1970-01-01 00:00:00,因為這表示從紀元開始的 0 秒,值 0 保留用于表示“0000-00-00 00:00:00”,即“零”的 TIMESTAMP 值。TIMESTAMP 的字面常量同 DATETIME。

上面 date_time_test 表 ts 列是 TIMESTAMP,一旦創建后,我們發現 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) 以來的秒數,但是它不能表示 1970-01-01 00:00:00,因為這表示從紀元開始的 0 秒,值 0 保留用于表示“0000-00-00 00:00:00”,即“零”的 TIMESTAMP 值。TIMESTAMP 的字面常量同 DATETIME。

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

向 date_time_test 表中插入一條數據,如下:

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

登錄后復制

查看數據,如圖:

發現 ts 列自動更新為插入數據時的時間戳。

更新當前數據,如圖:

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

登錄后復制

再次查看時間戳,如圖:

ts 列已經更新為當前時間戳。這和 MySQL 的系統變量 explicit_defaults_for_timestamp 有關,

show variables like  explicit_defaults_for_timestamp

登錄后復制

如圖:

explicit_defaults_for_timestamp 處于關閉狀態,此時,插入數據時,如果 ts 沒有指定值,會被初始化為默認值,更新數據時,ts 列同時更新。explicit_defaults_for_timestamp 處于打開狀態,不會被初始化為默認,也不具備自動更新為當前時間戳。也可以對 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,但允許使用字符串或數字向 TIME 列賦值。TIME 類型這個時間范圍表明它不僅可以表示一天的時間,也可以表示經過的時間或兩個事件之間的時間間隔。字面常量轉換規則如下:

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

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

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

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

YEAR 和 YEAR(4)

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

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

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 位數字 1901 到 2155;

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

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

注:

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

總結如下:

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

小數位精度 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 賦值允許使用符合格式的字符串或數字賦值允許使用符合格式的字符串或數字賦值允許使用符合格式的字符串或數字賦值允許使用符合格式的字符串或數字賦值允許使用符合格式的字符串或數字賦值小數位分隔符無只識別小數點. 只識別小數點. 只識別小數點. 無日期分隔符任何標點無任何標點任何標點無時間分隔符無任何標點任何標點任何標點無無效值處理(strict mode 關閉狀態)

轉化為

0000-00-00

轉化為

0000-00-00 00:00:00

轉化為

0000-00-00 00:00:00

轉換為

00:00:00

轉換為 0000

關于“MySQL 中 datetime、date、time、str 之間如何轉化”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注丸趣 TV 行業資訊頻道,丸趣 TV 小編每天都會為大家更新不同的知識點。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-13發表,共計6331字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 东乡| 平果县| 玉门市| 黄山市| 静安区| 三亚市| 大城县| 清丰县| 临颍县| 胶南市| 晋州市| 奉贤区| 兴和县| 纳雍县| 神池县| 惠水县| 漳平市| 昭通市| 汤原县| 泰顺县| 华容县| 双柏县| 和平县| 陕西省| 定陶县| 仙游县| 乌鲁木齐县| 措美县| 漳浦县| 谢通门县| 醴陵市| 宽城| 宜川县| 乌拉特后旗| 东乌| 黄龙县| 合水县| 文登市| 文成县| 黔东| 延庆县|