常用的储存时间/日期的类型:
- DATE:仅用于存储日期值(年、月、日),格式为'YYYY-MM-DD'。
- TIME:仅用于存储时间值(小时、分钟、秒),格式为'HH:MM:SS'。
- DATETIME:用于同时存储日期和时间值,格式为'YYYY-MM-DD HH:MM:SS'。
- TIMESTAMP:用于存储日期和时间戳值,格式同 DATETIME 一致,但其支持更广泛的时间范围。
详细介绍:
DATE 是一种日期类型的数据类型。它采用格式为 'YYYY-MM-DD' 的字符串表示方式,其中 YYYY 表示四位数的年份,MM 表示两位数的月份,DD 表示两位数的日期。例如,'2021-08-16' 表示 2021 年 8 月 16 日。
注意:当插入日期时,必须使用正确的格式。并且该日期必须是有效的。否则,将会抛出错误或者导致不可预期的结果。
有效期:'1000-01-01' 到 '9999-12-31'
拓展:在查询日期值时,可以使用许多内置函数和操作符来执行各种日期操作。例如,可以使用 YEAR()、MONTH()、DAY() 函数分别获取给定日期的年、月、日信息。还可以使用 DATE_ADD()、DATE_SUB() 函数增加或减少日期中的天数、周数、月数等。
例如:
CREATE TABLE my_table (
id INT PRIMARY KEY,
name VARCHAR(50),
birth_date DATE
);
INSERT INTO my_table (id, name, birth_date) VALUES
(1, 'Alice', '1990-07-01'),
(2, 'Bob', '1985-12-15'),
(3, 'Charlie', '1995-02-28');
select YEAR(birth_date) from my_table;
DATE_ADD()函数讲解
可以使用 DATE_ADD() 函数增加给定日期值中的天数、周数、月数、年数等
语法:DATE_ADD(date, INTERVAL value unit)
date 表示要进行操作的日期值;value 表示要添加或减去的值;unit 表示要添加或减去的时间单位。可以使用以下时间单位
- MICROSECOND:微秒
- SECOND:秒
- MINUTE:分钟
- HOUR:小时
- DAY:天
- WEEK:周
- MONTH:月
- QUARTER:季度
- YEAR:年
示例:
SELECT DATE_ADD('2018-01-01', INTERVAL 1 DAY);
-- 结果:2018-01-02
SELECT DATE_ADD('2021-08-16 10:00:00', INTERVAL 2 HOUR);
-- 结果:2021-08-16 12:00:00
SELECT DATE_ADD('1995-02-28', INTERVAL 1 MONTH);
-- 结果:1995-03-28
SELECT DATE_ADD('2022-01-01', INTERVAL 1 YEAR);
-- 结果:2023-01-01
SELECT DATE_ADD('2021-08-16', INTERVAL -1 DAY);
-- 结果:2021-08-15
时间格式化:DATE_FORMAT();
注意:"%Y-%m-%d" 如果大M,大D的话,就会展示英文的
小y,会展示年的后两位
select DATE_FORMAT(birth_date,"%Y-%m-%d") from my_table;
select DATE_FORMAT(birth_date,"%m") from my_table;
TIME 是一种时间类型的数据类型,用于存储时间值(小时、分钟、秒)。
它采用格式为 'HH:MM:SS' 的字符串表示方式,其中 HH 表示两位数的小时,MM 表示两位数的分钟,SS 表示两位数的秒。例如,'23:59:59' 表示 23 点 59 分 59 秒
TIME 类型的有效时间范围是从 '-838:59:59' 到 '838:59:59'。
在查询时间值时,可以使用许多内置函数和操作符来执行各种时间操作。
例如,可以使用 HOUR()、MINUTE()、SECOND() 函数分别获取给定时间的小时、分钟、秒信息。还可以使用 TIME_FORMAT() 函数将时间值格式化为指定的字符串形式。
TIME_FORMAT()使用!
语法:TIME_FORMAT(time,format)
time 表示要进行操作的时间值;format 表示要将时间值格式化为的字符串形式。
- %H:小时(00-23)
- %h:小时(01-12)
- %i:分钟(00-59)
- %s:秒(00-59)
- %p:AM 或 PM
SELECT TIME_FORMAT('10:15:30', '%H:%i:%s');
-- 结果:10:15:30
SELECT TIME_FORMAT('22:45:15', '%h:%i:%s %p');
-- 结果:10:45:15 PM
注意:TIME_FORMAT(time,format),如果time参数不是时间类型(例如:一个整数或者一个日期)则会返回NULL值
DATETIME 类型是一种日期时间类型的数据类型,用于同时存储日期和时间值。
它采用格式为 'YYYY-MM-DD HH:MM:SS' 的字符串表示方式,其中 YYYY 表示四位数的年份,MM 表示两位数的月份,DD 表示两位数的日期,HH 表示小时,MM 表示分钟,SS 表示秒。例如,'2021-08-16 10:00:00' 表示 2021 年 8 月 16 日早上 10 点。
时间有效期:1000-01-01 00:00:00' 到 '9999-12-31 23:59:59
可以使用 YEAR()、MONTH()、DAY() 函数获取给定日期的年、月、日信息;使用 HOUR()、MINUTE()、SECOND() 函数获取给定时间的小时、分钟、秒信息。
还可以使用 DATE_FORMAT() 函数将日期时间值格式化为指定的字符串形式。
select DATE_FORMAT(created_at ,"%Y-%m-%d %H-%i-%s") from my_table;
TIMESTAMP 是一种日期时间类型的数据类型,用于存储日期和时间值。它采用格式为 'YYYY-MM-DD HH:MM:SS' 的字符串表示方式,其中 YYYY 表示四位数的年份,MM 表示两位数的月份,DD 表示两位数的日期,HH 表示小时,MM 表示分钟,SS 表示秒。
与 DATETIME 类型不同的是,TIMESTAMP 数据类型只使用 4 个字节来存储,从而占用更少的磁盘空间。此外,TIMESTAMP 数据类型还支持自动更新功能,可以在插入或更新记录时自动设置为当前时间戳。
CREATE TABLE my_table2 (
id INT PRIMARY KEY,
name VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO my_table2 (id, name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
有效期:'1970-01-01 00:00:01' 到 '2038-01-19 03:14:07'
TIMESTAMP 数据类型使用 32 位整数来存储时间戳,最大值为 2^31-1(即 2147483647),相当于 2038 年 1 月 19 日 3 点 14 分 7 秒。
在查询和操作日期时间值时,可以使用许多内置函数和操作符来执行各种有用的操作。例如,可以使用 YEAR()、MONTH()、DAY() 函数获取给定日期的年、月、日信息;使用 HOUR()、MINUTE()、SECOND() 函数获取给定时间的小时、分钟、秒信息。还可以使用 DATE_FORMAT() 函数将日期时间值格式化为指定的字符串形式。
- YEAR:用于存储年份信息,格式为'YYYY'。MySQL 中的 YEAR 数据类型存储的是 2 个字节,可以表示从 1901 年到 2155 年之间的年份。
- INTERVAL:用于存储两个日期或时间之间的时间量,例如一个小时或一个月。
- DAY、WEEK、MONTH、QUARTER 和 YEAR:用于执行在日期上的算术运算或比较
当前日期:select CURRENT_DATE() 年月日
函数只返回日期值而不包含时间信息
1.INTERVAL 就是示例1上的 DATE_ADD(date, INTERVAL value unit)
2.Day SELECT DAY('2021-08-05') ---5
3.WEEK类型
WEEK 是一种日期时间类型的数据类型,用于存储周数信息。它采用一个介于 0 到 53 之间的整数表示一年中的周数。
CREATE TABLE my_table (
id INT PRIMARY KEY,
name VARCHAR(50),
week_of_birth WEEK
);
INSERT INTO my_table (id, name, week_of_birth) VALUES
(1, 'Alice', 31),
(2, 'Bob', 42),
(3, 'Charlie', 22);
4.QUARTER
QUARTER 是一种日期时间类型的数据类型,用于存储季度信息。它采用一个介于 1 到 4 之间的整数表示一年中的季度。
在 Java 中,可以使用不同的类来映射数据库中的日期时间类型。以下是一些常见的数据类型和它们对应的 Java 类型:
具体而言:
DATE 类型在 Java 中通常映射为 java.sql.Date 类型。java.sql.Date 只包含年月日信息,没有时间信息。可以使用 Date.valueOf(String) 方法将字符串转换为 java.sql.Date 类型,也可以使用 getDate() 方法从 ResultSet 中获取日期值。
TIME 类型在 Java 中通常映射为 java.sql.Time 类型。java.sql.Time 只包含时间信息,没有年月日信息。可以使用 Time.valueOf(String) 方法将字符串转换为 java.sql.Time 类型,也可以使用 getTime() 方法从 ResultSet 中获取时间值。
DATETIME 和 TIMESTAMP 类型在 Java 中通常映射为 java.sql.Timestamp 类型。java.sql.Timestamp 包含日期和时间信息,精确到纳秒级别。可以使用 Timestamp.valueOf(String) 方法将字符串转换为 java.sql.Timestamp 类型,也可以使用 getTimestamp() 方法从 ResultSet 中获取日期时间值。