飞翔飞翔
主页
  • 计算机基础

    • TCP协议
  • 数据库

    • SQL教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP协议
  • 数据库

    • SQL教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • 第1章 数据定义(DDL)

    • SQL简介
    • SQL语法
    • SQL注释
    • 创建数据库
    • 删除数据库
    • 创建表
    • 修改表
    • 删除表
    • 约束概述
    • NOT NULL约束
    • UNIQUE约束
    • PRIMARY KEY约束
    • FOREIGN KEY约束
    • CHECK约束
    • DEFAULT约束
    • 视图
    • 索引
    • 自增字段
    • 日期类型
  • 第2章 数据操作(DML)

    • 基础查询

      • SELECT查询
      • DISTINCT去重
      • LIMIT限制行数
      • 别名
      • 通配符
    • 条件过滤

      • WHERE条件筛选
      • AND运算符
      • OR运算符
      • NOT运算符
      • BETWEEN区间
      • IN运算符
      • LIKE模糊匹配
      • ORDER BY排序
    • 聚合函数

      • 聚合函数概述
      • COUNT计数
      • SUM求和
      • AVG平均值
      • MAX最大值
      • MIN最小值
    • 分组过滤

      • GROUP BY分组
      • HAVING过滤分组
    • 数据修改

      • INSERT插入数据
      • UPDATE修改数据
      • DELETE删除数据
      • NULL值处理
    • 表连接

      • JOIN连接概述
      • INNER JOIN内连接
      • LEFT JOIN左连接
      • RIGHT JOIN右连接
      • FULL JOIN全连接
      • SELF JOIN自连接
    • 集合操作

      • UNION并集
      • UNION ALL不去重并集
    • 高级查询

      • ALL运算符
      • ANY运算符
      • CASE条件表达式
      • EXISTS存在性检查
      • NULL处理函数
  • 第3章 事务控制(TCL)

    • COMMIT提交事务
    • ROLLBACK回滚
    • SAVEPOINT存档点
  • 第4章 数据控制(DCL)

    • GRANT授权
    • REVOKE撤销权限
    • SQL托管
    • SQL注入防护
  • 第5章 进阶主题

    • INSERT INTO SELECT复制数据
    • SELECT INTO复制表
    • 参数化查询
    • 预编译语句
    • 备份数据库
    • 存储过程
  • 第6章 参考

    • 关键字参考
    • 快速参考
    • 数据类型
    • 运算符

日期

SQL 提供了多种日期时间类型,帮你把时间这个抽象概念变成数据库能存能查的具体数据。

常用的日期时间类型有:

类型格式一句话说明
DATEYYYY-MM-DD只存日期,不存时间
TIMEHH:MM:SS只存时间,不存日期
DATETIMEYYYY-MM-DD HH:MM:SS日期+时间,不随时区变
TIMESTAMPYYYY-MM-DD HH:MM:SS日期+时间,自动时区转换
YEARYYYY只存年份

DATETIME 和 TIMESTAMP 的区别要特别注意:TIMESTAMP 存储的是 UTC 时间戳,读取时自动转换为当前时区的时间,适合跨时区应用;DATETIME 存储的是字面值,不随时区变化,适合存储"绝对时间"(比如会议开始时间、生日)。TIMESTAMP 的范围是 1970 到 2038 年(32 位限制),DATETIME 的范围是 1000 到 9999 年。

什么场景需要它?几乎每张业务表都离不开日期字段:员工入职日期、订单创建时间、商品上架时间、工资发放日期。飞翔科技的员工表需要 join_year(入职年份),订单表需要 order_date(下单日期),日志表需要 created_at(创建时间戳)。选对类型,后续的日期计算、比较、格式化都会顺手得多。

标准写法:

CREATE TABLE 表名 (
    列名 DATE,
    列名 DATETIME DEFAULT CURRENT_TIMESTAMP
);

以飞翔科技为例。业务表中的日期应用:

-- 员工表:用 YEAR 存入职年份,DATE 存出生日期,DATETIME 存创建时间
CREATE TABLE employees (
    emp_id       INT AUTO_INCREMENT PRIMARY KEY,
    emp_name     VARCHAR(50) NOT NULL,
    join_year    YEAR,           -- 入职年份,如 2018
    birth_date   DATE,           -- 出生日期,如 1990-06-15
    created_at   DATETIME DEFAULT CURRENT_TIMESTAMP,
    company_name VARCHAR(100) DEFAULT '广州飞翔科技'
);

-- 订单表:记录下单时间
CREATE TABLE orders (
    order_id     BIGINT AUTO_INCREMENT PRIMARY KEY,
    product_id   INT NOT NULL,
    quantity     INT NOT NULL,
    order_date   DATETIME DEFAULT CURRENT_TIMESTAMP,
    total_amount DECIMAL(10,2)
);

-- 插入员工数据
INSERT INTO employees (emp_name, join_year, birth_date)
VALUES ('翱翔', 2018, '1990-06-15');

-- 查询 2018 年入职的员工
SELECT emp_name, join_year
FROM employees
WHERE join_year = 2018;

YEAR 类型只占 1 字节,存年份绰绰有余;DATE 类型适合存生日、入职日这类"日期";DATETIME DEFAULT CURRENT_TIMESTAMP 让每条记录自动带上创建时间,省去了手动填写的麻烦。日期类型选对了,后续的"按年统计"、"按月汇总"、"计算年龄"等操作都会事半功倍。

在线测试

上一页
自增字段