如何在SQL中使用CAST函数和连接表达式操作数据

来自菜鸟教程
跳转至:导航、​搜索

介绍

当您第一次在 SQL 数据库中创建表时,您必须通过列出您希望表保存的每一列以及这些表将存储什么样的数据来定义其整体结构。 然后,当您向表中添加数据时,您插入的值必须与您为每个相应列定义的数据类型对齐。 通过强制您输入与表的预定义结构一致的值,SQL 数据库可以帮助您确保不会错误地输入任何值。 但是,当您尝试比较具有不同数据类型的两个值或尝试将多个列中的值组合成单个结果值时,这种刚性结构会使事情变得困难。

在本教程中,您将学习如何使用 CAST 函数操作数据,将一个值或一组值的数据类型更改为另一种,并使用连接表达式将字符和数值数据值串在一起。 您还将练习在同一查询中运行 CAST 函数和连接表达式以生成完整的语句。

先决条件

要完成本教程,您需要:

  • 运行 Ubuntu 20.04 的服务器,非 root 用户具有 sudo 管理权限并启用了防火墙。 按照我们的 使用 Ubuntu 20.04 的初始服务器设置开始。
  • 在服务器上安装并保护 MySQL。 按照我们的 如何在 Ubuntu 20.04 上安装 MySQL 指南进行设置。 本指南假定您还设置了非 root MySQL 用户,如本指南的 Step 3 中所述。

注意: 请注意,许多关系数据库管理系统使用自己独特的 SQL 实现。 尽管本教程中概述的命令适用于大多数 RDBMS,但如果您在 MySQL 以外的系统上测试它们,确切的语法或输出可能会有所不同。


要在本教程中练习使用 CAST 函数和连接表达式,您需要一个加载了示例数据的数据库和表。 如果您没有准备好插入,您可以阅读以下 连接到 MySQL 并设置示例数据库 部分,以了解如何创建数据库和表。 本教程将自始至终引用此示例数据库和表。

您还可以使用嵌入在此页面上的交互式终端来试验本教程中的示例查询。 单击下面的Launch an Interactive Terminal!按钮开始使用。

启动交互式终端!

连接到 MySQL 并设置示例数据库

如果您的 SQL 数据库在远程服务器上运行,请从本地计算机通过 SSH 连接到您的服务器:

ssh sammy@your_server_ip

接下来,打开 MySQL 提示符,将 sammy 替换为您的 MySQL 用户帐户信息。 如果您在此页面上使用嵌入式交互式终端,请注意提示时使用的密码是单词 secret

mysql -u sammy -p

创建一个名为 castconDB 的数据库:

CREATE DATABASE castconDB;

如果数据库创建成功,您将收到以下输出:

OutputQuery OK, 1 row affected (0.01 sec)

要选择 castconDB 数据库,请运行以下 USE 语句:

USE castconDB;
OutputDatabase changed

选择数据库后,在其中创建一个表。 对于本教程的示例,我们将创建一个表格来保存 Mr. 的成绩。 弗兰克的六年级秋季学期课程。 该表将包含以下 15 列:

  • student_id:显示 int 数据类型的值,并将用作表的 主键 ,这意味着该列中的每个值将用作其各自的唯一标识符排。
  • first_name:使用最多 20 个字符的 varchar 数据类型来保存学生的名字。
  • last_name:保存具有 varchar 数据类型的学生的姓氏,同样最多 20 个字符。
  • email_address:使用 varchar 数据类型,最多 30 个字符来存储每个学生的电子邮件。
  • participation_grade:以int数据类型显示每个学生的总参与成绩。
  • attendance_grade:使用int数据类型显示每个学生的考勤成绩。
  • midterm_deadline:使用 TIMESTAMP 数据类型来表示每个学生必须在截止日期之前提交期中考试。 此数据类型将日期和时间组合在一个字符串中,并使用以下格式:(YYYY-MM-DD HH:MM:SS)。
  • midterm_submitted:使用 TIMESTAMP 数据类型记录学生提交期中考试的确切日期和时间。
  • midterm_grade:使用 decimal 数据类型来指定每个学生的期中考试成绩。 此列声明指定精度为四,小数位数为一,这意味着此列中的值可以有四位数字,其中一位数字位于小数点的右侧。
  • essay_deadline:显示学生必须使用 TIMESTAMP 数据类型提交论文的时间和日期。
  • essay_submitted:使用 TIMESTAMP 数据类型来跟踪学生提交论文作业的时间。
  • essay_grade:保存每个学生的作文成绩,数据类型为decimal,精度为4,小数位数为1,小数点右边。
  • finalexam_deadline:使用 TIMESTAMP 数据类型存储期末考试的截止日期信息。
  • finalexam_submitted:使用 TIMESTAMP 数据类型记录学生为期末考试提交的实际时间和日期。
  • finalexam_grade:包含每个学生的期末考试成绩,数据类型为 decimal,精度为存储的四位数字,小数点右侧为一位数。

通过运行以下 CREATE TABLE 命令创建一个名为 fall_grades 的表,该表包含这些列中的每一列:

CREATE TABLE fall_grades (
student_id int, 
first_name varchar(20),
last_name varchar(20), 
email_address varchar(30),
participation_grade int,
attendance_grade int,
midterm_deadline TIMESTAMP,
midterm_submitted TIMESTAMP,
midterm_grade decimal(4,1),
essay_deadline TIMESTAMP,
essay_submitted TIMESTAMP,
essay_grade decimal(4,1),
finalexam_deadline TIMESTAMP,
finalexam_submitted TIMESTAMP,
finalexam_grade decimal(4,1),
PRIMARY KEY (student_id)
); 

接下来将一些示例数据插入到空表中:

INSERT INTO fall_grades
(student_id, first_name, last_name, email_address, participation_grade, attendance_grade, midterm_deadline, midterm_submitted, midterm_grade, essay_deadline, essay_submitted, essay_grade, finalexam_deadline, finalexam_submitted, finalexam_grade)
VALUES
(1, 'Arnold', 'Shortman', 'ashortman@ps118.com', 98, 90, '2022-10-16 12:00:00', '2022-10-16 06:30:00', 85.8, '2022-11-20 12:00:00', '2022-11-20 03:00:00', 90.1, '2022-12-11 12:00:00', '2022-12-11 03:00:00', 82.5),
(2, 'Helga', 'Pataki', 'hpataki@ps118.com', 85, 100, '2022-10-16 12:00:00', '2022-10-16 10:00:00', 88.4, '2022-11-20 12:00:00', '2022-11-21 03:15:00', 72.5, '2022-12-11 12:00:00', '2022-12-11 05:00:00', 90.0),
(3, 'Gerald', 'Johanssen', 'gjohanssen@ps118.com', 100, 95, '2022-10-16 12:00:00', '2022-10-16 02:00:00', 94.2, '2022-11-20 12:00:00', '2022-11-20 02:45:00', 95.8, '2022-12-11 12:00:00', '2022-12-11 11:00:00', 88.1),
(4, 'Phoebe', 'Heyerdahl', 'pheyerdahl@ps118.com', 100, 100, '2022-10-16 12:00:00', '2022-10-16 11:00:00', 98.8, '2022-11-20 12:00:00', '2022-11-20 11:15:00', 90.4, '2022-12-11 12:00:00', '2022-12-11 11:40:00', 100.0),
(5, 'Harold', 'Berman', 'hberman@ps118.com', 100, 75, '2022-10-16 12:00:00', '2022-10-16 08:00:00', 75.7, '2022-11-20 12:00:00', '2022-11-22 09:15:00', 67.5, '2022-12-11 12:00:00', '2022-12-11 09:15:00', 90.9),
(6, 'Eugene', 'Horowitz', 'ehorowitz@ps118.com', 100, 100, '2022-10-16 12:00:00', '2022-10-16 01:00:00', 100.0, '2022-11-20 12:00:00', '2022-11-20 01:22:00', 89.9, '2022-12-11 12:00:00', '2022-12-11 07:55:00', 98.2),
(7, 'Rhonda', 'Lloyd', 'rlloyd@ps118.com', 100, 80, '2022-10-16 12:00:00', '2022-10-16 06:00:00', 90.4, '2022-11-20 12:00:00', '2022-11-20 06:09:00',81.3, '2022-12-11 12:00:00', '2022-12-11 06:45:00', 95.5),
(8, 'Stinky', 'Peterson', 'speterson@ps118.com', 100, 85, '2022-10-16 12:00:00', '2022-10-16 03:00:00', 70.6, '2022-11-20 12:00:00', '2022-11-20 05:55:00', 93.1, '2022-12-11 12:00:00', '2022-12-11 10:11:00', 73.2);
OutputQuery OK, 8 rows affected (0.01 sec)
Records: 8  Duplicates: 0  Warnings: 0

插入数据后,您就可以开始学习如何在 SQL 中使用 CAST 函数和连接表达式。

使用 CAST 函数

CAST 函数 允许您将文字值或列中保存的值转换为特定的数据类型。 使用 CAST 函数有助于确保给定表达式中值的数据类型兼容。

要使用 CAST 命令,您必须指定包含要转换的现有数据值的列,然后在表达式中写入您的首选数据值和/或长度。 下面是一个语法示例:

CAST 函数语法

. . .CAST(existing data value AS desired data value) . . .

然而,重要的是要注意,CAST 函数遵守某些规则才能正确运行。 例如,确保要转换的数据类型与要转换的数据类型兼容是很重要的。 参考示例数据,您将无法将 finalexam_grade 中的值从数值数据值(在本例中为 decimal 数据类型)直接转换为字符串值,例如使用 CAST 功能的字母等级。 同样,您不能将具有最大长度的数据类型(例如包含 varchar(30) 值的示例列)转换为更长的长度(例如,varchar(35))。

还需要注意的是,不同的 SQL 实现在运行使用 CAST 函数转换数据类型的查询时会有不同的行为。 例如,在 MySQL 中使用 CAST 函数运行查询可能会产生与在 PostgreSQL 中运行相同查询不同的结果。

为了更好地理解如何使用 CAST 函数,请根据您在上一步中插入的示例数据想象以下场景。 先生。 弗兰克是 PS 118 的六年级老师,他正准备提交秋季学期的成绩。 他一直在努力跟踪每个学生的进步,特别关心他们的期中考试、论文和期末考试的成绩。 假设你在帮助先生。 作为助教的弗兰克,他要求你向他提供那些评分作业的信息。

您将通过查询 fall_grades 表来检索此数据,以检索相关信息,例如学生的 first_namelast_name 及其每个作业的成绩:

SELECT first_name, last_name, midterm_grade, essay_grade, finalexam_grade FROM fall_grades;
Output+------------+-----------+---------------+-------------+-----------------+
| first_name | last_name | midterm_grade | essay_grade | finalexam_grade |
+------------+-----------+---------------+-------------+-----------------+
| Arnold     | Shortman  |          85.8 |        90.1 |            82.5 |
| Helga      | Pataki    |          88.4 |        72.5 |            90.0 |
| Gerald     | Johanssen |          94.2 |        95.8 |            88.1 |
| Phoebe     | Heyerdahl |          98.8 |        90.4 |           100.0 |
| Harold     | Berman    |          75.7 |        67.5 |            90.9 |
| Eugene     | Horowitz  |         100.0 |        89.9 |            98.2 |
| Rhonda     | Lloyd     |          90.4 |        81.3 |            95.5 |
| Stinky     | Peterson  |          70.6 |        93.1 |            73.2 |
+------------+-----------+---------------+-------------+-----------------+
8 rows in set (0.00 sec)

在将这个结果集带给先生之后。 弗兰克,他解释说,他使用的系统只允许他以整数形式输入成绩,并且需要转换这些十进制数据值。 您决定使用 CAST 函数将指定的字符值数量(在本例中为 decimal 数据类型中的四个)转换为两个字符值。

对于此查询,使用上一个示例中的语法,但包含一个 CAST 函数,用于将 decimal 数据类型转换为每个评分作业的两个字符。 您将在三个不同的表达式(用于 midterm_gradeessay_gradefinalexam_grade)中实现 CAST 函数,以将它们仅转换为 2 个字符数据值:

SELECT first_name, last_name, 
CAST(midterm_grade AS char(2)) AS midterm, 
CAST(essay_grade AS char(2)) AS essay, 
CAST(finalexam_grade AS char(2)) AS finalexam 
FROM fall_grades;
Output+------------+-----------+---------+-------+-----------+
| first_name | last_name | midterm | essay | finalexam |
+------------+-----------+---------+-------+-----------+
| Arnold     | Shortman  | 85      | 90    | 82        |
| Helga      | Pataki    | 88      | 72    | 90        |
| Gerald     | Johanssen | 94      | 95    | 88        |
| Phoebe     | Heyerdahl | 98      | 90    | 10        |
| Harold     | Berman    | 75      | 67    | 90        |
| Eugene     | Horowitz  | 10      | 89    | 98        |
| Rhonda     | Lloyd     | 90      | 81    | 95        |
| Stinky     | Peterson  | 70      | 93    | 73        |
+------------+-----------+---------+-------+-----------+
8 rows in set, 24 warnings (0.00 sec)

在审查了每个学生的成绩后,Mr. 弗兰克询问您是否可以获取有关每个学生提交作业的确切日期和时间的信息。

要检索此数据,请运行以下 SELECT 语句:

SELECT first_name, last_name, midterm_deadline, essay_deadline, finalexam_deadline FROM fall_grades;
Output+------------+-----------+---------------------+---------------------+---------------------+
| first_name | last_name | midterm_deadline    | essay_deadline      | finalexam_deadline  |
+------------+-----------+---------------------+---------------------+---------------------+
| Arnold     | Shortman  | 2022-10-16 12:00:00 | 2022-11-20 12:00:00 | 2022-12-11 12:00:00 |
| Helga      | Pataki    | 2022-10-16 12:00:00 | 2022-11-20 12:00:00 | 2022-12-11 12:00:00 |
| Gerald     | Johanssen | 2022-10-16 12:00:00 | 2022-11-20 12:00:00 | 2022-12-11 12:00:00 |
| Phoebe     | Heyerdahl | 2022-10-16 12:00:00 | 2022-11-20 12:00:00 | 2022-12-11 12:00:00 |
| Harold     | Berman    | 2022-10-16 12:00:00 | 2022-11-20 12:00:00 | 2022-12-11 12:00:00 |
| Eugene     | Horowitz  | 2022-10-16 12:00:00 | 2022-11-20 12:00:00 | 2022-12-11 12:00:00 |
| Rhonda     | Lloyd     | 2022-10-16 12:00:00 | 2022-11-20 12:00:00 | 2022-12-11 12:00:00 |
| Stinky     | Peterson  | 2022-10-16 12:00:00 | 2022-11-20 12:00:00 | 2022-12-11 12:00:00 |
+------------+-----------+---------------------+---------------------+---------------------+
8 rows in set (0.00 sec)

在审查了这个输出后,先生。 弗兰克叹了口气,告诉你这些信息太难解析了。 这些列都设置为存储 TIMESTAMP 值,这就是它们非常长的原因。 您决定使用 CAST 函数将输出转换为更易于理解的内容,并将查询分成两部分:一个用于日期,一个用于时间。

要仅查询学生提交作业的时间,请运行 CAST 并指定您希望将该特定列中的数据值转换为 time 值:

SELECT first_name, last_name, 
CAST(midterm_submitted AS time) AS midterm, 
CAST(essay_submitted AS time) AS essay, 
CAST(finalexam_submitted AS time) AS finalexam 
FROM fall_grades;
Output+------------+-----------+----------+----------+-----------+
| first_name | last_name | midterm  | essay    | finalexam |
+------------+-----------+----------+----------+-----------+
| Arnold     | Shortman  | 06:30:00 | 03:00:00 | 03:00:00  |
| Helga      | Pataki    | 10:00:00 | 03:15:00 | 05:00:00  |
| Gerald     | Johanssen | 02:00:00 | 02:45:00 | 11:00:00  |
| Phoebe     | Heyerdahl | 11:00:00 | 11:15:00 | 11:40:00  |
| Harold     | Berman    | 08:00:00 | 09:15:00 | 09:15:00  |
| Eugene     | Horowitz  | 01:00:00 | 01:22:00 | 07:55:00  |
| Rhonda     | Lloyd     | 06:00:00 | 06:09:00 | 06:45:00  |
| Stinky     | Peterson  | 03:00:00 | 05:55:00 | 10:11:00  |
+------------+-----------+----------+----------+-----------+
8 rows in set (0.00 sec)

此输出概述了每个学生完成作业的时间范围。 你记得每项作业都应在周日午夜到期。 一些学生的时间安排是一致的,而其他学生则较早完成,或者在午夜截止日期之前完成。

然而,这只是先生的一半信息。 Frank 要求,所以让我们处理下一个查询,它将使用 CAST 函数将相同的 TIMESTAMP 值转换为 date 值。 您将运行与以前相同的查询,但这次将 time 替换为 date

SELECT first_name, last_name, 
CAST(midterm_submitted AS date) AS midterm, 
CAST(essay_submitted AS date) AS essay, 
CAST(finalexam_submitted AS date) AS finalexam 
FROM fall_grades;
Output+------------+-----------+------------+------------+------------+
| first_name | last_name | midterm    | essay      | finalexam  |
+------------+-----------+------------+------------+------------+
| Arnold     | Shortman  | 2022-10-16 | 2022-11-20 | 2022-12-11 |
| Helga      | Pataki    | 2022-10-16 | 2022-11-21 | 2022-12-11 |
| Gerald     | Johanssen | 2022-10-16 | 2022-11-20 | 2022-12-11 |
| Phoebe     | Heyerdahl | 2022-10-16 | 2022-11-20 | 2022-12-11 |
| Harold     | Berman    | 2022-10-16 | 2022-11-22 | 2022-12-11 |
| Eugene     | Horowitz  | 2022-10-16 | 2022-11-20 | 2022-12-11 |
| Rhonda     | Lloyd     | 2022-10-16 | 2022-11-20 | 2022-12-11 |
| Stinky     | Peterson  | 2022-10-16 | 2022-11-20 | 2022-12-11 |
+------------+-----------+------------+------------+------------+
8 rows in set (0.00 sec)

根据此输出,您可以确定哪些学生在截止日期后交了作业,以及为什么他们的成绩可能由于迟到的分数减少而受到影响。 例如,在论文作业的 2022-11-20 截止日期之后,Helga 迟交了一天的作业(2022-11-21),而 Harold 迟交了两天的作业(2022-11-22)。

虽然先生。 Frank 对这些清理后的结果很满意,他需要更多帮助来进一步阐明他的成绩报告中的数据。 在下一节中,您将练习使用可以将多个文字值或列值组合成单个字符串值的连接表达式,帮助使信息更清晰地解释为完整的语句或句子。

使用串联表达式

使用 连接表达式CONCAT,您可以通过将不同列中的字符或数值组合成一个结果来操作数据。

通常,SQL 数据库在各自的列中分别返回结果集中的数据值。 例如,如果您要查询 PS 118 学生的 first_namelast_name,您的输出将显示如下:

SELECT first_name, last_name FROM fall_grades;
Output+------------+-----------+
| first_name | last_name |
+------------+-----------+
| Arnold     | Shortman  |
| Helga      | Pataki    |
| Gerald     | Johanssen |
| Phoebe     | Heyerdahl |
| Harold     | Berman    |
| Eugene     | Horowitz  |
| Rhonda     | Lloyd     |
| Stinky     | Peterson  |
+------------+-----------+
8 rows in set (0.00 sec)

然而,这些信息的格式并不像 Mr. 弗兰克更喜欢这份报告。 让我们使用连接执行另一个查询,将学生的名字和姓氏组合成一个字符串。 以下查询使用 CONCAT 关键字执行此操作,并为结果列提供别名 full_names

SELECT CONCAT(first_name, last_name) AS full_names FROM fall_grades;
Output+-----------------+
| full_names      |
+-----------------+
| ArnoldShortman  |
| HelgaPataki     |
| GeraldJohanssen |
| PhoebeHeyerdahl |
| HaroldBerman    |
| EugeneHorowitz  |
| RhondaLloyd     |
| StinkyPeterson  |
+-----------------+
8 rows in set (0.00 sec)

串联表达式通常适用于所有数据类型,但如果您不指定数据值之间的间距等详细信息,则输出将显示为单个字符串中的连续表达式,如该输出所示。 要解决此问题,您可以在两个 first_namelast_name 列之间添加一对单引号,它们之间有一个空格 (' '),这样值将输出为单个字符串,但这次它们之间有一个空格以使其更具可读性:

SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM fall_grades;
Output+------------------+
| full_name        |
+------------------+
| Arnold Shortman  |
| Helga Pataki     |
| Gerald Johanssen |
| Phoebe Heyerdahl |
| Harold Berman    |
| Eugene Horowitz  |
| Rhonda Lloyd     |
| Stinky Peterson  |
+------------------+
8 rows in set (0.00 sec)

通过在查询中的单引号之间包含一个空格,输出现在清楚地将学生的姓名显示为两个单独的词,而不是一个组合词。

注意: 大多数现代关系 DBMS 使用本节中概述的语法来连接值。 但是,这种语法(CONCAT 关键字)不是 SQL 标准定义的传统语法。

在 SQL 中连接值的传统方法是在要连接的数据值之间放置一对竖线。 MySQL 根本不允许你使用这种语法,但是一些 DBMS,比如 PostgreSQL,允许你使用任何一种方法。 以下示例查询(在 PostgreSQL 数据库上运行)产生与前一个查询相同的结果,但这次使用竖线:

SELECT first_name || ' ' || last_name AS full_name 
FROM fall_grades;
Output    full_name
------------------
 Arnold Shortman
 Helga Pataki
 Gerald Johanssen
 Phoebe Heyerdahl
 Harold Berman
 Eugene Horowitz
 Rhonda Lloyd
 Stinky Peterson
(8 rows)

现在让我们尝试另一个示例,在该示例中我们将检索有关每个学生的更多信息。 这一次,我们想要将 first_namelast_namee-mail_addressfinalexam_gradefinalexam_submitted 数据值连接到单个列中CONCAT。 不要忘记在要添加空格的每列之间添加单引号,如下例所示:

SELECT CONCAT(first_name, ' ', last_name, ' ', 
email_address, ' ', finalexam_grade, ' ', finalexam_submitted) 
AS student_info FROM fall_grades;
Output+-----------------------------------------------------------------+
| student_info                                                    |
+-----------------------------------------------------------------+
| Arnold Shortman ashortman@ps118.com 82.5 2022-12-11 03:00:00    |
| Helga Pataki hpataki@ps118.com 90.0 2022-12-11 05:00:00         |
| Gerald Johanssen gjohanssen@ps118.com 88.1 2022-12-11 11:00:00  |
| Phoebe Heyerdahl pheyerdahl@ps118.com 100.0 2022-12-11 11:40:00 |
| Harold Berman hberman@ps118.com 90.9 2022-12-11 09:15:00        |
| Eugene Horowitz ehorowitz@ps118.com 98.2 2022-12-11 07:55:00    |
| Rhonda Lloyd rlloyd@ps118.com 95.5 2022-12-11 06:45:00          |
| Stinky Peterson speterson@ps118.com 73.2 2022-12-11 10:11:00    |
+-----------------------------------------------------------------+
8 rows in set (0.00 sec)

先生。 Frank 对这些结果很满意,但希望通过转换一些数据值来使其成绩报告更加简洁。 在这种情况下,您将使用 CAST 函数将 finalexam_grade 数据类型转换为整数和使用 TIMESTAMP 数据的 finalexam_submitted键入 date 值,如下所示:

SELECT CONCAT(first_name, ' ', last_name, ' ', email_address, ' ', 
CAST(finalexam_grade AS char(2)), ' ', 
CAST(finalexam_submitted AS date)) 
AS student_info FROM fall_grades;
Output+-----------------------------------------------------+
| student_info                                        |
+-----------------------------------------------------+
| Arnold Shortman ashortman@ps118.com 82 2022-12-11   |
| Helga Pataki hpataki@ps118.com 90 2022-12-11        |
| Gerald Johanssen gjohanssen@ps118.com 88 2022-12-11 |
| Phoebe Heyerdahl pheyerdahl@ps118.com 10 2022-12-11 |
| Harold Berman hberman@ps118.com 90 2022-12-11       |
| Eugene Horowitz ehorowitz@ps118.com 98 2022-12-11   |
| Rhonda Lloyd rlloyd@ps118.com 95 2022-12-11         |
| Stinky Peterson speterson@ps118.com 73 2022-12-11   |
+-----------------------------------------------------+
8 rows in set, 8 warnings (0.00 sec)

让我们更进一步,编写一个使用 CAST 函数和连接表达式输出完整句子的查询。 您可以通过在单引号之间写一个简短的语句来做到这一点。 确保在每列之间保留一个空格,方法是在书面陈述的结尾前后添加一个空格:

SELECT CONCAT(first_name, ' ', last_name, ' can be contacted at ', email_address, 
' and received a grade of ', 
CAST(finalexam_grade AS char(2)),
' after submitting the final exam on ', 
CAST(finalexam_submitted AS date)) 
AS student_info FROM fall_grades;
Output+------------------------------------------------------------------------------------------------------------------------------------+
| student_info                                                                                                                       |
+------------------------------------------------------------------------------------------------------------------------------------+
| Arnold Shortman can be contacted at ashortman@ps118.com and received a grade of 82 after submitting the final exam on 2022-12-11   |
| Helga Pataki can be contacted at hpataki@ps118.com and received a grade of 90 after submitting the final exam on 2022-12-11        |
| Gerald Johanssen can be contacted at gjohanssen@ps118.com and received a grade of 88 after submitting the final exam on 2022-12-11 |
| Phoebe Heyerdahl can be contacted at pheyerdahl@ps118.com and received a grade of 10 after submitting the final exam on 2022-12-11 |
| Harold Berman can be contacted at hberman@ps118.com and received a grade of 90 after submitting the final exam on 2022-12-11       |
| Eugene Horowitz can be contacted at ehorowitz@ps118.com and received a grade of 98 after submitting the final exam on 2022-12-11   |
| Rhonda Lloyd can be contacted at rlloyd@ps118.com and received a grade of 95 after submitting the final exam on 2022-12-11         |
| Stinky Peterson can be contacted at speterson@ps118.com and received a grade of 73 after submitting the final exam on 2022-12-11   |
+------------------------------------------------------------------------------------------------------------------------------------+
8 rows in set, 8 warnings (0.00 sec)

这个输出结果是关于 Mr. 中每个学生的完整句子。 弗兰克的课。 单引号之间的这些细微添加对于明确这些信息的对象及其各自的数据有很大的不同。 这是因为您从查询中检索数据的特定列。 先生。 弗兰克对你令人难以置信的工作表示感谢。 他非常高兴你甚至通过写出完整的句子来节省他的时间,他可以快速输入到他的报告中。

结论

本指南解释了使用 CAST 函数和连接表达式处理数据的各种用例。 使用 CAST 函数,您练习了将一种数据类型的列转换为另一种数据类型。 此外,您还学习了如何使用连接表达式将不同的数据值(包括字符和数字)放在一个字符串中。 您还在同一查询中执行了 CAST 函数和连接表达式,以生成完整的句子,提供有关数据值的更多上下文。 这可以简化单独写出它们的过程,而是使您能够按原样有效地复制和粘贴信息。 要了解有关 SQL 中其他函数的更多信息,请查看我们的 如何使用 SQL 系列。