MySQL如何存储日期

在MySQL中,日期可以使用多种数据类型进行存储,例如DATEDATETIMETIMESTAMPYEAR等。这些数据类型有不同的存储格式和精度,根据具体的需求选择合适的数据类型来存储日期数据。

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 |

插入数据

插入