--将日期格式中的“-”转化为“/” SELECT ISBN,bookname, REPLACE(CONVERT(char(10),intime,120),'-','/') AS 数据录入日期 FROM bookinfo ORDER BY ISBN;
SQL Server 日期格式转换代码逐行讲解
这段代码的作用是:从图书信息表中查询数据,并将日期格式中的 - 替换为 /。
一、代码整体结构
sql
SELECT ISBN, bookname, REPLACE(CONVERT(char(10), intime, 120), '-', '/') AS 数据录入日期 FROM bookinfo ORDER BY ISBN;
二、逐部分讲解
第1-2行:普通字段查询
sql
SELECT ISBN, bookname,
| 字段 | 含义 |
|---|---|
ISBN | 图书的唯一标识号(国际标准书号) |
bookname | 图书名称 |
第3行:日期格式转换(核心)
sql
REPLACE(CONVERT(char(10), intime, 120), '-', '/') AS 数据录入日期
这一行可以拆解为三层嵌套函数,从内到外依次是:
text
REPLACE( CONVERT( char(10), intime, 120 ), '-', '/' ) ↑ ↑ ↑ ↑ ↑ ↑ │ │ │ │ │ └── 替换成的字符 │ │ │ │ └─────── 要被替换的字符 │ │ │ └────────────── 要转换的字段 │ │ └────────────────────── 目标数据类型(固定长度10字符) │ └────────────────────────────────── 转换函数 └──────────────────────────────────────────── 替换函数
三、CONVERT(char(10), intime, 120) 详解
| 参数 | 值 | 含义 |
|---|---|---|
| 第1个参数 | char(10) | 转换后的数据类型:固定长度10个字符的字符串 |
| 第2个参数 | intime | 要转换的字段名(录入日期) |
| 第3个参数 | 120 | 日期格式代码,代表 yyyy-mm-dd hh:mi:ss(24小时制) |
120 格式代码的含义
| 代码 | 格式 | 示例 |
|---|---|---|
120 | yyyy-mm-dd hh:mi:ss | 2024-04-14 15:30:25 |
注意:这里 char(10) 只取前10个字符,所以 yyyy-mm-dd 正好10个字符,时间部分会被截掉。
转换过程
| 原始值(intime) | CONVERT(char(10), intime, 120) 结果 |
|---|---|
2024-04-14 15:30:25 | 2024-04-14 |
2023-12-25 08:00:00 | 2023-12-25 |
四、REPLACE() 函数详解
词源
| 单词 | 词源 | 含义 |
|---|---|---|
| REPLACE | 古法语 re-(再次)+ placer(放置) | 替换、取代 |
语法
sql
REPLACE(原字符串, 要被替换的子串, 替换成的子串)
在本例中
sql
REPLACE('2024-04-14', '-', '/')| 参数 | 值 | 含义 |
|---|---|---|
| 第1个 | '2024-04-14' | 原字符串 |
| 第2个 | '-' | 要找的字符(连字符) |
| 第3个 | '/' | 替换成斜杠 |
结果:'2024/04/14'
五、完整转换流程图
text
原始数据
┌─────────────────────────────────────────────┐
│ intime = 2024-04-14 15:30:25 │
└─────────────────────────────────────────────┘
↓
CONVERT(char(10), intime, 120)
↓
┌─────────────────────────────────────────────┐
│ 结果:'2024-04-14'(只取日期部分) │
└─────────────────────────────────────────────┘
↓
REPLACE('2024-04-14', '-', '/')
↓
┌─────────────────────────────────────────────┐
│ 结果:'2024/04/14'(连字符换成斜杠) │
└─────────────────────────────────────────────┘
↓
AS 数据录入日期
↓
┌─────────────────────────────────────────────┐
│ 最终显示:2024/04/14 │
└─────────────────────────────────────────────┘六、执行效果示例
假设 bookinfo 表数据
| ISBN | bookname | intime |
|---|---|---|
| 978-7-111-12345-6 | 数据库原理 | 2024-04-14 15:30:25 |
| 978-7-302-56789-0 | 计算机网络 | 2023-12-25 08:00:00 |
查询结果
| ISBN | bookname | 数据录入日期 |
|---|---|---|
| 978-7-111-12345-6 | 数据库原理 | 2024/04/14 |
| 978-7-302-56789-0 | 计算机网络 | 2023/12/25 |
七、ORDER BY ISBN 的作用
sql
ORDER BY ISBN
| 单词 | 词源 | 含义 |
|---|---|---|
| ORDER | 拉丁语 ordo(顺序、排列) | 排序 |
| BY | 古英语 bī(靠近、通过) | 按照 |
作用:查询结果按照 ISBN 字段的升序排列(默认)。
八、其他数据库的等价写法
数据库 | 等价写法 |
SQL Server | REPLACE(CONVERT(char(10), intime, 120), '-', '/') |
MySQL | REPLACE(DATE_FORMAT(intime, '%Y-%m-%d'), '-', '/') |
Oracle | REPLACE(TO_CHAR(intime, 'YYYY-MM-DD'), '-', '/') |
PostgreSQL | REPLACE(TO_CHAR(intime, 'YYYY-MM-DD'), '-', '/') |
九、总结
| 函数 | 作用 |
|---|---|
CONVERT(char(10), intime, 120) | 将日期时间转换为 YYYY-MM-DD 格式的字符串 |
REPLACE(..., '-', '/') | 将连字符 - 替换为斜杠 / |
AS 数据录入日期 | 给结果列起别名 |
ORDER BY ISBN | 按 ISBN 排序 |
一句话总结:这段代码先通过 CONVERT 函数将日期时间字段转换为 YYYY-MM-DD 格式的字符串,再用 REPLACE 函数将连字符 - 替换为斜杠 /,最终得到 YYYY/MM/DD 格式的日期显示。ORDER BY ISBN 确保结果按图书编号排序