MySQL時差関数と日付変換計算関数

MySQLの時差関数(TIMESTAMPDIFF、DATEDIFF)、日付変換計算関数(date_add、day、date_format、str_to_date)

  1. 時差関数(TIMESTAMPDIFF、DATEDIFF)

MySQL を使用して時差を計算し、TIMESTAMPDIFF、DATEDIFF を使用し、実験結果を記録する必要があります。

--0
select datediff(now(), now());
 
--2
select datediff('2023-09-22 23:59:00', '2023-09-20 00:00:00');
 
--2
select datediff('2023-09-22 00:00:00', '2023-09-20 23:59:00');
 
--1
select TIMESTAMPDIFF(DAY, '2023-09-20 23:59:00', '2023-09-22 00:00:00');
 
--2
select TIMESTAMPDIFF(DAY, '2023-09-20 00:00:00', '2023-09-22 00:00:00');
 
--2
select TIMESTAMPDIFF(DAY, '2023-09-20 00:00:00', '2023-09-22 12:00:00');
 
--2
select TIMESTAMPDIFF(DAY, '2023-09-20 00:00:00', '2023-09-22 23:59:00');
 
--71
select TIMESTAMPDIFF(HOUR, '2023-09-20 00:00:00', '2023-09-22 23:00:00');
 
--4260
select TIMESTAMPDIFF(MINUTE, '2023-09-20 00:00:00', '2023-09-22 23:00:00');
  1. 日付変換計算関数(date_add、day、date_format、str_to_date)

DATE_ADD() 関数の使用法

定義と使用法: DATE_ADD() 関数は、指定された時間間隔を日付に追加します。

DATE_ADD(date,INTERVAL expr type)

date パラメータは有効な日付式です。expr パラメータは、追加する時間間隔です。
type パラメータには、DAY、WEEK などの値を指定できます。

DATE_ADD("2023-09-20 ",INTERVAL 2 day)

结果:"2023-09-22 "
DATE_ADD("2023-09-20 ",INTERVAL -2 day)

结果:"2023-09-18 "

date_format(): フォーマットされた時刻と日付を返します。

文法:

DATE_FORMAT(date,format);

パラメータ:

date: フォーマットする必要がある有効な時刻と日付

format: 各指定子の前にパーセント記号 (%) が付いている、事前定義された形式の文字列。

SELECT id,
       name,
       DATE_FORMAT(start_time, '%Y-%m-%d %H:%i:%S') start_time,
       DATE_FORMAT(end_time, '%Y-%m-%d %H:%i:%S')   end_time
FROM user

STR_TO_DATE 関数は、文字列を日付/時刻値に変換するために使用されます。

STR_TO_DATE 関数と DATE_FORMAT 関数の機能は逆です。

構文形式

STR_TO_DATE(str,format)

srt: 日付としてフォーマットされる文字列 (入力文字列)

format: 使用するフォーマット文字列

str を形式に従って解析できない場合、STR_TO_DATE 関数は NULL を返します。

いずれかのパラメータが NULL の場合、STR_TO_DATE 関数は NULL を返します。

定義済みの説明文字リスト:
ここに画像の説明を挿入します
一般的に使用されるフォーマット形式
ここに画像の説明を挿入します

実践例
文字列を DATE 値に変換する


-- 2023-09-20
SELECT STR_TO_DATE('20,9,2023','%d,%m,%Y');
-- 2023-09-20
SELECT STR_TO_DATE('2023-09-20 11:30:00','%Y-%m-%d');
-- 2023-08-01
SELECT STR_TO_DATE('August,1,2023', '%M,%e,%Y');
-- 2023-08-10
SELECT STR_TO_DATE('August 10 2023', '%M %d %Y');
-- 2023-08-15
SELECT STR_TO_DATE('Monday, August 15, 2023', '%W,%M %e, %Y');

将字符串转换为DATETIME-- 2023-09-20 11:30:00
SELECT STR_TO_DATE('20230920 1130','%Y%m%d %h%i');
-- 2023-09-20 11:30:00
SELECT STR_TO_DATE('2023-09-20 11:30:00','%Y-%m-%d %H:%i:%s');
-- 2023-09-20 10:40:10
SELECT STR_TO_DATE('2023,9,20 10,40,10', '%Y,%m,%d %h,%i,%s');
STR_TO_DATE函数在根据格式字符串format解析输入字符串str时,忽略输入字符串str末尾的额外字符

-- 2023-09-20
SELECT STR_TO_DATE('20,9,2023 extra characters','%d,%m,%Y'); 
-- 2023-09-20 11:30:00
SELECT STR_TO_DATE('20230920 1130 extra characters','%Y%m%d %h%i');
如果输入字符串str是非法的,则STR_TO_DATE函数返回NULL

-- NULL
SELECT STR_TO_DATE('2023','%Y');
-- NULL
SELECT STR_TO_DATE('11','%h');
-- NULL
SELECT STR_TO_DATE('1130','%h%i');
-- NULL
SELECT STR_TO_DATE('113005','%h%i%s');
-- NULL
SELECT STR_TO_DATE('August,20,2023', '%M %e %Y');
-- NULL
SELECT STR_TO_DATE('Monday, August 20, 2023', '%W %M %e %Y');

-- 用日期与字符串转换,计算当月第一天、下月第一天
select curdate() as '当前日期', 
DATE_FORMAT(curdate(), '%Y-%m') as '当前月份', 
str_to_date(concat(DATE_FORMAT(curdate(), '%Y-%m'), '-01'), '%Y-%m-%d') as '当前月的第一天', 
date_add(str_to_date(concat(DATE_FORMAT(curdate(), '%Y-%m'), '-01'), '%Y-%m-%d'), interval 1 month) as '下月的第一天';
 
-- 当前月的最后一天
select last_day(curdate());
 
-- 下月第一天
select date_add(last_day(curdate()), interval 1 day);
 
-- 当天为当月的第几天
select day(curdate());
 
-- 当月第一天
select date_add(curdate(), interval 1-(day(curdate())) day);

おすすめ

転載: blog.csdn.net/weixin_45817985/article/details/133089189