SQLでCAST関数と連結式を使用してデータを操作する方法

提供:Dev Guides
移動先:案内検索

序章

SQLデータベースに最初にテーブルを作成するときは、テーブルに保持する各列と、それらのテーブルに格納されるデータの種類をリストして、全体的な構造を定義する必要があります。 次に、テーブルにデータを追加するときに、挿入する値は、それぞれの列に定義したデータ型と一致している必要があります。 SQLデータベースは、テーブルの事前定義された構造に一致する値を強制的に入力することにより、値を誤って入力しないようにするのに役立ちます。 ただし、この厳密な構造により、データ型が異なる2つの値を比較しようとしている場合、または複数の列の値を1つの結果値に結合しようとしている場合、問題が発生する可能性があります。

このチュートリアルでは、CAST関数を使用してデータを操作し、値または値のセットのデータ型を別のデータ型に変更し、連結式を使用して文字と数値データ値を一緒に文字列化する方法を学習します。 また、同じクエリでCAST関数と連結式を実行して、完全なステートメントを作成する練習もします。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • sudo管理者権限とファイアウォールが有効になっているroot以外のユーザーがいるUbuntu20.04を実行しているサーバー。 Ubuntu20.04を使用したサーバーの初期設定に従って開始します。
  • MySQLがサーバーにインストールされ、保護されています。 これを設定するには、 Ubuntu20.04ガイドにMySQLをインストールする方法に従ってください。 このガイドは、このガイドのステップ3 で概説されているように、root以外のMySQLユーザーも設定していることを前提としています。

注:多くのリレーショナルデータベース管理システムは、独自の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。の成績を保持するテーブルを作成します。 フランクの6年生の秋学期のクラス。 このテーブルには、次の15列が含まれます。

  • student_idintデータ型の値を表示し、テーブルの主キーとして機能します。つまり、この列の各値は、それぞれの一意の識別子として機能します。行。
  • first_name:最大20文字のvarcharデータ型を使用して、学生の名を保持します。
  • last_namevarcharデータ型の学生の名前を最大20文字で保持します。
  • email_address:最大30文字のvarcharデータ型を使用して、各学生の電子メールを保存します。
  • participation_gradeintデータ型で各学生の合計参加成績を表示します。
  • attendance_gradeintデータ型を使用して、各学生の出席グレードを表示します。
  • midterm_deadlineTIMESTAMPデータ型を使用して、各学生が中間試験を提出しなければならない期限を表します。 このデータ型は、日付と時刻の両方を1つの文字列に結合し、次の形式を使用します:(YYYY-MM-DD HH:MM:SS)。
  • midterm_submittedTIMESTAMPデータ型を使用して、学生が中間試験を提出した正確な日時を記録します。
  • midterm_gradedecimalデータ型を使用して、中間試験の各学生の成績を指定します。 この列宣言は、1のスケールで4の精度を指定します。これは、この列の値が4桁で、そのうちの1桁が小数点の右側にあることを意味します。
  • essay_deadlineTIMESTAMPデータ型を使用して学生がエッセイを提出する必要がある日時を表示します。
  • essay_submittedTIMESTAMPデータ型を使用して、学生がエッセイの課題を提出した時期を追跡します。
  • essay_gradedecimalデータ型、精度4、スケール1で、各学生のエッセイの成績を保持します。後者は小数点の右側にあります。
  • finalexam_deadlineTIMESTAMPデータ型を使用して、最終試験の締め切り情報を保存します。
  • finalexam_submittedTIMESTAMPデータ型を使用して、最終試験のための学生の実際の日時の提出を記録します。
  • finalexam_gradedecimalデータ型の最終試験の各学生の成績が含まれます。データ型は4桁の精度で、小数点の右側に1桁の目盛りがあります。

次の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', '[email protected]', 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', '[email protected]', 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', '[email protected]', 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', '[email protected]', 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', '[email protected]', 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', '[email protected]', 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', '[email protected]', 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', '[email protected]', 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)など)に変換することはできません。

CAST関数を使用してデータ型を変換するクエリを実行すると、SQLの実装が異なると動作が異なることに注意することも重要です。 たとえば、MySQLでCAST関数を使用してクエリを実行すると、PostgreSQLで同じクエリを実行した場合とは異なる結果が生成される可能性があります。

CAST関数の使用方法をよりよく理解するために、前の手順で挿入したサンプルデータに基づいて次のシナリオを想像してください。 氏 PS 118の6年生の教師であるフランクは、秋学期の成績を提出する準備をしています。 彼は各学生の進歩を熱心に追跡しており、特に中間試験、エッセイ、および最終試験の成績について心配しています。 あなたがミスターを助けているとしましょう。 ティーチングアシスタントとしてのフランク、そして彼はあなたにそれらの段階的な割り当てのための情報を彼に提供するように頼まれました。

このデータを取得するには、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)

この結果セットを氏に持ってきた後。 フランク、彼は、彼が使用しているシステムでは、成績を整数として入力することしかできず、これらの10進データ値を変換する必要があると説明しています。 CAST関数を使用して、指定された文字値の数(この場合はdecimalデータ型の4つ)を2つの文字値に変換することにしました。

このクエリでは、前の例の構文を使用しますが、CAST関数を含めて、decimalデータ型を段階的な割り当てごとに2文字に変換します。 CAST関数を3つの異なる式(midterm_gradeessay_grade、およびfinalexam_gradeの場合)で実装して、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)

各学生の成績を確認した後、氏。 フランクは、各生徒が課題を提出した正確な日時に関する情報を取得できるかどうかを尋ねます。

このデータを取得するには、次の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)

この出力を確認した後、Mr。 フランクはため息をつき、この情報を解析するのは難しすぎると言います。 これらの列はすべてTIMESTAMP値を格納するように設定されているため、非常に長くなります。 CAST関数を使用して、出力をより消化しやすいものに変換し、クエリを2つに分割することにしました。1つは日付用、もう1つは時刻用です。

生徒が課題を提出した時間のみをクエリするには、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)

この出力は、各生徒が課題を終えた時間枠の概要を提供します。 あなたは、すべての割り当てが日曜日の深夜に予定されていることを思い出します。 何人かの学生は彼らのタイミングと一致していましたが、他の学生はより早く終了したか、真夜中の締め切りの少し前に終了しました。

しかし、これは氏の情報の半分に過ぎません。 フランクが求めたので、CAST関数を使用して同じTIMESTAMP値をdate値に変換する次のクエリに取り組みましょう。 以前と同じクエリを実行しますが、今回はtimedateに置き換えます。

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)

この出力に基づいて、締め切り後にどの生徒が課題を提出したか、および遅刻のために与えられたポイントが少ないために成績が影響を受けた理由を特定できます。 たとえば、ヘルガは1日遅れて課題を提出し(2022-11-21)、ハロルドはエッセイの課題の2022-11-20期限の2日遅れて(2022-11-22)課題を提出しました。

氏が。 フランクはこれらのクリーンアップされた結果に満足しています。彼は成績レポートのためにデータをさらに明確にするためにもう少し助けが必要です。 次のセクションでは、複数のリテラル値または列値を1つの文字列値に結合できる連結式の使用を練習し、情報をより明確にして完全なステートメントまたは文として解釈できるようにします。

連結式の使用

連結式CONCATを使用すると、異なる列の文字または数値を1つの結果にまとめることで、データを操作できます。

通常、SQLデータベースは、結果セットのデータ値をそれぞれの列に個別に返します。 たとえば、PS118の生徒の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)

ただし、この情報は氏のようにフォーマットされていません。 フランクは報告を好みます。 連結を使用して別のクエリを実行し、生徒の名前と名前を1つの文字列に結合してみましょう。 次のクエリは、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)

連結式は通常、すべてのデータ型で機能しますが、データ値間の間隔などの詳細を指定しない場合、この出力で証明されるように、出力は単一の文字列のランオンとして表示されます。 これを修正するには、2つのfirst_name列とlast_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)

クエリに一重引用符の間にスペースを含めることにより、出力には、生徒の名前が1つの結合された単語ではなく、2つの別個の単語として明確に表示されるようになりました。

注:最新のリレーショナルDBMSのほとんどは、値を連結するためにこのセクションで概説されている構文を使用します。 ただし、この構文(CONCATキーワード)は、SQL標準で定義されている従来の構文ではありません。

SQLで値を連結する従来の方法は、連結するデータ値の間に1対の垂直バーを配置することです。 MySQLではこの構文をまったく使用できませんが、PostgreSQLなどの一部のDBMSではどちらの方法でも使用できます。 次のクエリ例(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 [email protected] 82.5 2022-12-11 03:00:00    |
| Helga Pataki [email protected] 90.0 2022-12-11 05:00:00         |
| Gerald Johanssen [email protected] 88.1 2022-12-11 11:00:00  |
| Phoebe Heyerdahl [email protected] 100.0 2022-12-11 11:40:00 |
| Harold Berman [email protected] 90.9 2022-12-11 09:15:00        |
| Eugene Horowitz [email protected] 98.2 2022-12-11 07:55:00    |
| Rhonda Lloyd [email protected] 95.5 2022-12-11 06:45:00          |
| Stinky Peterson [email protected] 73.2 2022-12-11 10:11:00    |
+-----------------------------------------------------------------+
8 rows in set (0.00 sec)

氏 フランクはこれらの結果に満足していますが、データ値の一部を変換することにより、成績レポートをさらに簡潔にしたいと考えています。 このシナリオでは、CAST関数を使用して、finalexam_gradeデータ型を整数に変換し、finalexam_submittedTIMESTAMPデータを使用します。次のように、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 [email protected] 82 2022-12-11   |
| Helga Pataki [email protected] 90 2022-12-11        |
| Gerald Johanssen [email protected] 88 2022-12-11 |
| Phoebe Heyerdahl [email protected] 10 2022-12-11 |
| Harold Berman [email protected] 90 2022-12-11       |
| Eugene Horowitz [email protected] 98 2022-12-11   |
| Rhonda Lloyd [email protected] 95 2022-12-11         |
| Stinky Peterson [email protected] 73 2022-12-11   |
+-----------------------------------------------------+
8 rows in set, 8 warnings (0.00 sec)

さらに一歩進んで、CAST関数と連結式を使用して完全な文を出力するクエリを作成してみましょう。 これを行うには、一重引用符の間に短いステートメントを記述します。 記述されたステートメントの終了の前後に1つのスペースを追加して、各列の間にスペースを維持してください。

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 [email protected] and received a grade of 82 after submitting the final exam on 2022-12-11   |
| Helga Pataki can be contacted at [email protected] and received a grade of 90 after submitting the final exam on 2022-12-11        |
| Gerald Johanssen can be contacted at [email protected] and received a grade of 88 after submitting the final exam on 2022-12-11 |
| Phoebe Heyerdahl can be contacted at [email protected] and received a grade of 10 after submitting the final exam on 2022-12-11 |
| Harold Berman can be contacted at [email protected] and received a grade of 90 after submitting the final exam on 2022-12-11       |
| Eugene Horowitz can be contacted at [email protected] and received a grade of 98 after submitting the final exam on 2022-12-11   |
| Rhonda Lloyd can be contacted at [email protected] and received a grade of 95 after submitting the final exam on 2022-12-11         |
| Stinky Peterson can be contacted at [email protected] 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関数を使用して、あるデータ型の列を別のデータ型に変換する練習をしました。 さらに、連結式を使用して、文字と数値の両方のさまざまなデータ値を1つの文字列にまとめる方法を学びました。 また、同じクエリでCAST関数と連結式を実行して、データ値に関するより多くのコンテキストを提供する完全な文を生成しました。 これにより、それらを個別に書き出すプロセスを合理化でき、代わりに、情報をそのまま効率的にコピーして貼り付けることができます。 SQLの他の関数の詳細については、SQLの使用方法に関するシリーズをご覧ください。