date类型:
该DATE类型用于具有日期部分但没有时间部分的值。MySQL检索并DATE以 格式显示 值 。支持的范围是 到。 'YYYY-MM-DD''1000-01-01''9999-12-31'
-- 创建表,字段类型是date:
create table test_date01 (a date);
-- 正确格式插入数据
insert into test_date01 values ('2023-08-25');
-- 插入错误格式数据:
insert into test_date01 values ('2023-08')
报错:ERROR 1292 (22007): Incorrect date value: '202308' for column 'a' at row 1
注意:添加日期数据时,使用“年-月-日”格式,不能缺少数据;
-- 没有默认值时,可以为空,需要正确填写空值:
-- 创建日期表,没有默认时间
CREATE TABLE test_date02 (id INT auto_increment PRIMARY KEY, b DATE);
-- 插入正确的日期空值
insert into test_date02 (b) values (Null);
-- 删除空数据
DELETE FROM test_date01 WHERE b IS NULL;
Time类型:
MySQL检索并TIME以'hh:mm:ss'格式(或 'hhh:mm:ss'大小时数格式)显示值 。TIME值的范围可以从 '-838:59:59'到 '838:59:59'。小时部分可能会很大,因为该TIME类型不仅可以用来表示一天中的某个时间(必须小于24小时),而且可以用来表示经过的时间或两个事件之间的时间间隔(可能远大于24小时,甚至是负面的)。
MySQL可识别TIME多种格式的值,其中某些格式可包含尾随小数秒的部分,精度最高为微秒(6位数)。请参见 第9.1.3节“日期和时间文字”。有关MySQL中小数秒支持的信息,请参见 第11.2.7节“时间值的分数秒”。特别是,TIME存储在列中的值中的任何小数部分 都将存储而不是丢弃。包括小数部分,TIME值的范围 是 '-838:59:59.000000'至 '838:59:59.000000'。
在为TIME列分配缩写值时要小心 。MySQL将TIME冒号的缩写值解释 为一天中的时间。也就是说,'11:12'手段 '11:12:00',不是 '00:11:12'。MySQL使用最右边的两个数字表示秒(即经过时间而不是一天中的时间)的假设来解释不带冒号的缩写值。例如,您可能会认为 '1112'和1112含义 '11:12:00'(11点后12分钟),但是MySQL将它们解释为'00:11:12'(11分钟12秒)。同样,'12'和 12解释为 '00:00:12'。
在时间部分和小数秒部分之间识别的唯一定界符是小数点。
默认情况下,超出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'还是无效。
要更严格地处理无效 TIME值,请启用严格的SQL模式以导致发生错误。请参见第5.1.10节“服务器SQL模式”。
文档:MySQL :: MySQL 5.7 Reference Manual :: 11.2.2 The DATE, DATETIME, and TIMESTAMP Typeshttps://dev.mysql.com/doc/refman/5.7/en/datetime.html
-- time:
-- time格式:'hh:mm:ss' 或 'hhh:mm:ss'大小时数格式,
-- TIME值的范围可以从 '-838:59:59'到 '838:59:59'
-- 创建时间表
CREATE TABLE test_time01 (a time)
-- 查询表结构
DESC test_time01
-- 添加数据时,time可以是str型,也可以是int型
INSERT INTO test_time01 VALUES ('16:02:01')
NSERT INTO test_time01 VALUES (160301)
-- 插入小时
INSERT INTO test_time01 VALUES (120000)
INSERT INTO test_time01 VALUES ('13:00:00')
-- 插入分秒,整数和字符串形式不一样
INSERT INTO test_time01 VALUES ('07:01')
INSERT INTO test_time01 VALUES (0801)
-- 插入秒
INSERT INTO test_time01 VALUES (10)
INSERT INTO test_time01 VALUES ('11')
-- 添加空数据
INSERT INTO test_time01 VALUES (NULL)
-- 更新数据
UPDATE test_time01 SET a = '00:07:01' WHERE a = '07:01:00'
-- 查询全部数据
SELECT * FROM test_time01