SQL Concatenate函数
可能会出现这样的情况,您需要连接存储在单个表的两个不同列中的字符串。为了连接这些字符串, 在SQL中使用字符串连接操作,使用 CONCAT() 函数。
- 可以将两个以上的字符串组合成一个字符串。
- 要组合的字符串可以存储在表的两个不同列中,也可以作为一个字符串独立存在而不存储到表中。
- 在串联存储在表的两个不同列中的字符串之后,最终连接后的字符串还可以存储在表的列中。
让我们看一些实际例子来更清楚地理解这个概念。我们将使用MySQL数据库来编写所有的查询。
考虑我们有以下字符串:
String 1: Hello
String 2: Allen
现在,编写一个查询将两个字符串连接成一个字符串并将其存储在一个变量中。
查询:
SELECT CONCAT ('Hello', ' Allen') AS FinalString;
两个字符串字面值被传递给 CONCAT() 函数。连接后的字符串存储在 ‘FinalString’ 中。
你将得到以下输出:
FinalString
---
Hello Allen
最终连接的字符串是“Hello Allen”,存储在’FinalString’中。
假设我们有多个如下所示的字符串:
String 1:Excited
String 2:to
String 3:learn
String 4:SQL
String 5:database
现在,编写一个查询来连接上述所有字符串以形成一个单一的字符串并将其存储在一个变量中。
查询:
mysql> SELECT CONCAT ('Excited', ' to', ' learn', ' SQL', ' database') AS FinalString;
5个字符串字面量传递给CONCAT()函数。拼接后的字符串存储在FinalString
中。
你将得到以下输出:
FinalString
---
Excited to learn SQL database
最终拼接的字符串是”Excited to learn SQL database”,存储在’FinalString’中。
我们也可以将字符串和数值文字结合起来形成一个字符串。
让我们看一下这方面的示例。
查询:
mysql> SELECT CONCAT ('SQL', '1000') AS FinalString;
将一个字符串字面量(SQL)和一个数字字面量(1000)传递给CONCAT()函数。
你将得到以下输出:
FinalString
---
SQL1000
最终的连接字符串是“SQL1000”,存储在’FinalString’中。
让我们来看几个示例,来连接存储在表的不同列中的字符串。
考虑我们有一个包含以下数据的物品表:
ID | Item_Name | Item_Quantity | Item_Price | Purchase_Date |
---|---|---|---|---|
1 | Soap | 5 | 200 | 2021-07-08 |
2 | Toothpaste | 2 | 80 | 2021-07-10 |
3 | Pen | 10 | 50 | 2021-07-12 |
4 | Bottle | 1 | 250 | 2021-07-13 |
5 | Brush | 3 | 90 | 2021-07-15 |
6 | Notebooks | 10 | 1000 | 2021-07-26 |
7 | Handkerchief | 3 | 100 | 2021-07-28 |
示例 1:
编写一个查询,将项名称与存储在items表中的相应价格进行拼接。
查询:
mysql> SELECT CONCAT ( Item_Name, Item_Price ) AS Item_Details FROM items;
将items表中存储在’Item_Name’和’Item_Price’列中的两个字符串作为参数传递给CONCAT()函数。
您将获得以下输出:
Item_Details
---
Soap200
Toothpaste80
Pen50
Bottle250
Brush90
Notebooks1000
Handkerchief100
所有存储在’Item_Name’中的项目名称和存储在’Item_Price’中的项目成本都是从项目表按行连接的,并存储在’Item_Details’中。SELECT查询显示存储在’Item_Details’中的所有值。
示例2:
编写一个查询,将项目ID与存储在项目表中的相应名称连接起来。
查询:
mysql> SELECT CONCAT ( ID, Item_Name ) AS Item_Details FROM items;
将存储在项目表的“ID”和“Item_Name”列中的两个字符串作为CONCAT()函数的参数传递。
您将获得以下输出:
Item_Details
---
1Soap
2Toothpaste
3Pen
4Bottle
5Brush
6Notebooks
7Handkerchief
所有存储在’ID’中的物品编号和存储在’Item_Name’中的物品名称都从项目表中按行连接起来,并存储在’Item_Details’中。SELECT查询显示存储在’Item_Details’中的所有值。
示例3:
编写一个查询将物品编号与存储在物品表中的物品名称以及物品编号和物品名称之间的空格连接起来。
查询:
mysql> SELECT CONCAT ( ID, ' ', Item_Name ) AS Item_Details FROM items;
将存储在items表的’ID’列和’Item_Name’列中以空格分隔的两个字符串作为参数传递给CONCAT()函数。
您将获得以下输出:
Item_Details
---
1 Soap
2 Toothpaste
3 Pen
4 Bottle
5 Brush
6 Notebooks
7 Handkerchief
将存储在’ID’中的所有项目ID以及存储在’Item_Name’中的所有项目名称按行连接起来,中间用一个空格分隔,并存储在’Item_Details’中。SELECT查询显示存储在’Item_Details’中的所有值。
示例4:
编写一个查询,将项目名称与其对应的ID串联起来。在每个项目ID之前应放置一个字符串常量’assigned to’,在每个项目ID之后应放置另一个字符串常量’as an item ID’。
查询:
mysql> SELECT CONCAT ( Item_Name, ' assigned to ' , ID, ' as an item ID' ) AS DETAILS FROM items;
‘Item_Name’, ‘assigned to’, ‘ID’ 和 ‘as an item ID’ 被作为参数传递给 CONCAT() 函数,并将连接后的字符串存储在 ‘Item_Details’ 中。
你将获得以下输出:
Item_Details |
---|
Soap assigned to 1 as an item ID |
Toothpaste assigned to 2 as an item ID |
Pen assigned to 3 as an item ID |
Bottle assigned to 4 as an item ID |
Brush assigned to 5 as an item ID |
Notebooks assigned to 6 as an item ID |
Handkerchief assigned to 7 as an item ID |
将保存在’Item_Name’中的所有项目名称和保存在’ID’中的项目id从项目表按行连接起来,并在每个项目id之前和之后分别加上字符串文字’assigned to’和’as an item ID’。整个连接后的字符串存储在’Item_Details’中,并由SELECT查询显示。
示例5:
编写一个查询,将项目表中的项目名称与其购买日期连接在一起,并在项目名称和购买日期之间加上字符串文字” is purchased on”。
查询:
mysql> SELECT CONCAT ( Item_Name, " is purchased on " , Purchase_Date) AS Item_Details FROM items;
将items表中’Item_Name’和’Purchase_Date’列中的两个字符串与字符串常量’ is purchased on ‘连接在一起,并将连接后的字符串作为参数传递给CONCAT()函数。
您将获得以下输出:
Item_Details |
---|
Soap is purchased on 2021-07-08 |
Toothpaste is purchased on 2021-07-10 |
Pen is purchased on 2021-07-12 |
Bottle is purchased on 2021-07-13 |
Brush is purchased on 2021-07-15 |
Notebooks is purchased on 2021-07-26 |
Handkerchief is purchased on 2021-07-28 |
将存储在’Item_Name’中的所有项目名称,以及存储在’Purchase_Date’中的购买日期,按行连接起来,它们之间每一个项目名称和购买日期之间以字符串“ is purchased on ”连接,存储在’Item_Details’中。SELECT查询显示在’Item_Details’中存储的所有值。
示例6:
编写一个查询,将每个项目名称与相应的数量以字符串”Cost of”连接起来,该字符串应放置在每个项目数量之前,项目数量后面添加一个空格,然后在每个项目名称之后放置一个字符串”is”,并将其进一步与相应的项目价格连接起来。
查询:
mysql> SELECT CONCAT ("Cost of " , Item_Quantity, " ", Item_Name, " is ", Item_Price) AS Item_Details FROM items;
您将获得以下输出:
Item_Details |
---|
Cost of 5 Soap is 200 |
Cost of 2 Toothpaste is 80 |
Cost of 10 Pen is 50 |
Cost of 1 Bottle is 250 |
Cost of 3 Brush is 90 |
Cost of 10 Notebooks is 1000 |
Cost of 3 Handkerchief is 100 |
将存储在’Item_Quantity’中的所有项目数量、存储在’Item_Name’中的项目名称以及存储在’Item_Price’中的项目成本按行从项目表中连接,连接项目数量和项目名称之前连接字符串文字’Cost of ‘和’is’。此外,’is’与项目成本连接。整个连接字符串存储在’Item_Details’中,并通过SELECT查询显示。