MySQL如何存储日期
在MySQL中,日期可以使用多种数据类型进行存储,例如DATE
、DATETIME
、TIMESTAMP
、YEAR
等。这些数据类型有不同的存储格式和精度,根据具体的需求选择合适的数据类型来存储日期数据。
DATE
DATE
类型用于存储日期,格式为YYYY-MM-DD。它占用3个字节的存储空间,范围从'1000-01-01'到'9999-12-31'。
创建表格
以下是使用DATE
数据类型创建一个名为employees
的表格的示例:
| Field | Type | Null | Key | Extra |
|--------------|-------------|------|-----|-------|
| id | INT | NO | PRI | |
| name | VARCHAR(50) | NO | | |
| hire_date | DATE | NO | | |
插入数据
插入数据时,可以使用YYYY-MM-DD
的格式来表示日期。
INSERT INTO employees (id, name, hire_date) VALUES
(1, 'Alice', '2022-01-01'),
(2, 'Bob', '2022-02-01'),
(3, 'Charlie', '2022-03-01');
查询数据
查询数据时,可以使用DATE
函数进行日期相关的操作,例如获取当前日期、比较日期等。
-- 获取当前日期
SELECT CURDATE();
-- 获取指定日期的年份
SELECT YEAR('2022-01-01');
-- 获取雇佣日期在指定范围内的员工
SELECT * FROM employees WHERE hire_date BETWEEN '2022-01-01' AND '2022-02-01';
DATETIME
DATETIME
类型用于存储日期和时间,格式为YYYY-MM-DD HH:MM:SS。它占用8个字节的存储空间,范围从'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。
创建表格
以下是使用DATETIME
数据类型创建一个名为orders
的表格的示例:
| Field | Type | Null | Key | Extra |
|--------------|-------------|------|-----|-------|
| id | INT | NO | PRI | |
| order_date | DATETIME | NO | | |
插入数据
插入数据时,可以使用YYYY-MM-DD HH:MM:SS
的格式来表示日期和时间。
INSERT INTO orders (id, order_date) VALUES
(1, '2022-01-01 10:00:00'),
(2, '2022-02-01 15:30:00'),
(3, '2022-03-01 20:45:00');
查询数据
查询数据时,可以使用DATE_FORMAT
函数来格式化日期和时间的显示方式。
-- 获取当前日期和时间
SELECT NOW();
-- 获取指定日期和时间的年份和月份
SELECT DATE_FORMAT('2022-01-01 10:00:00', '%Y-%m');
-- 获取下单日期在指定范围内的订单
SELECT * FROM orders WHERE order_date BETWEEN '2022-01-01' AND '2022-02-01';
TIMESTAMP
TIMESTAMP
类型也用于存储日期和时间,格式为YYYY-MM-DD HH:MM:SS。它占用4个字节的存储空间,范围从'1970-01-01 00:00:01'到'2038-01-19 03:14:07'。
TIMESTAMP
类型的特点是会自动更新,当插入或更新数据时,如果没有指定该字段的值,MySQL会自动将当前的日期和时间作为默认值。
创建表格
以下是使用TIMESTAMP
数据类型创建一个名为posts
的表格的示例:
| Field | Type | Null | Key | Extra |
|--------------|----------------|------|-----|----------------------|
| id | INT | NO | PRI | |
| title | VARCHAR(50) | NO | | |
| content | TEXT | NO | | |
| created_at | TIMESTAMP | NO | | DEFAULT CURRENT_TIME |
| updated_at | TIMESTAMP | NO | | DEFAULT CURRENT_TIME |
插入数据
插入