SQL FIND_IN_SET函数
结构化查询语言的FIND_IN_SET函数显示多个字符串中搜索字符串的位置。
FIND_IN_SET字符串函数的语法
语法1: 此语法使用SQL表的两个或多个列名与FIND_IN_SET函数一起使用:
SELECT FIND_IN_SET(Searched_String, Column_Name1, column_Name2, Column_Name3,……. Column_NameN) AS Alias_Name FROM Table_Name;
在Find_In_Set语法中,我们必须指定要搜索字符串的那些列的名称。
语法2: 此语法使用带有字符串的FIND_IN_SET函数:
SELECT FIND_IN_SET(Searched_string, "String1, String2, String3, …… StringN") AS Alias_Name;
语法3: 此语法使用FIND_IN_SET函数与单个字符一起使用:
SELECT FIND_IN_SET(Searched_character, "Character_1, character_2, Character_3, ……., Character_N") AS Alias_Name;
查找集合字符串函数示例
示例 1: 下面的查询显示给定字符列表中 ‘S’ 字符的位置:
SELECT FIND_IN_SET( 'S', ''H, I, A, P, Q, S, R, T, V, M'' ) AS S_Findinset;
输出:
S_Findinset
6
示例 2: 下面的语句显示了“Congratulations”字符串中“u”字符的位置:
SELECT FIND_IN_SET( ‘u’, ‘C, o, n, g, r, a, t, u, l, a, t, i, o, n, s ‘) AS Wishes u_Findinset;
输出:
S_Findinset
8
示例3: 以下的SELECT查询找到字符串列表中 ‘New’ 字符串的位置:
SELECT FIND_IN_SET('NEW', ''NEW, DELHI, IS, THE, CAPITAL, OF, INDIA'') AS NEW_Findinset;
输出:
NEW_Findinset
1
示例 4: 这个示例使用在结构化查询语言中的FIND_IN_SET函数与表格一起使用。
在这个示例中,我们需要创建一个新的SQL表格,通过该表格我们将会在列上执行FIND_IN_SET()函数。
在SQL数据库中创建新表格的语法如下:
CREATE TABLE table_name
(
First_Column_of_table Data Type (character_size of First Column),
Second_Column_of_table Data Type (character_size of the Second column ),
Third_Column_of_table Data Type (character_size of the Third column),
...
Last_Column_of_table Data Type (character_size of the Last column)
);
下面的CREATE语句创建了 Student_Grade 表:
CREATE TABLE Student_Grade
(
Roll_No INT PRIMARY KEY,
First_Name VARCHAR (100),
Last_Name VARCHAR (100),
First_City Varchar(120),
Second_City Varchar(120),
New_City Varchar(120),
Hindi_Marks INT,
Maths_Marks INT,
Grade Varchar (80)
);
下面的INSERT查询将学生的成绩和分数记录插入到 Student_Grade 表中:
INSERT INTO Student_Grade (Roll_No, First_Name, Last_Name, First_City, Second_City, New_City, Hindi_Marks, Maths_Marks, Grade) VALUES (10, Aman, Sharma, Lucknow Chandigarh, Ghaziabad, 88, 95, A2);
INSERT INTO Student_Grade
(Roll_No, First_Name, Last_Name, First_City, Second_City, New_City, Hindi_Marks, Maths_Marks, Grade)
VALUES ( 02, Vishal, Sharma, Chandigarh, Ghaziabad, Delhi, 95, 82, A1 );
INSERT INTO Student_Grade
(Roll_No, First_Name, Last_Name, First_City, Second_City, New_City, Hindi_Marks, Maths_Marks, Grade)
VALUES (07, Raj, Gupta, Delhi, Ghaziabad, Lucknow, 91, 95, A1);
INSERT INTO Student_Grade
(Roll_No, First_Name, Last_Name, First_City, Second_City, New_City, Hindi_Marks, Maths_Marks, Grade)
VALUES (04, Yash, Singhania, Ghaziabad, Delhi, Lucknow, 85, 82, A2);
INSERT INTO Student_Grade
(Roll_No, First_Name, Last_Name, First_City, Second_City, New_City, Hindi_Marks, Maths_Marks, Grade)
VALUES (11, Vinay, Roy, Delhi, Kanpur, Ghaziabad, 95, 97, A1);
INSERT INTO Student_Grade
(Roll_No, First_Name, Last_Name, First_City, Second_City, New_City, Hindi_Marks, Maths_Marks, Grade)
VALUES (16, Manoj, Gupta, Ghaziabad, Meerut, Chandigarh, 95, 90, B1);
INSERT INTO Student_Grade
(Roll_No, First_Name, Last_Name, First_City, Second_City, New_City, Hindi_Marks, Maths_Marks, Grade)
VALUES (19, Ram, Gupta, Lucknow, Ghaziabad, Chandigarh, 89, 95, A2);
以下SELECT语句显示了上述 Student_Grade 表中插入的记录:
SELECT * FROM Student_Grade;
Roll_No | First_Name | Last_Name | First_City | Second_City | New_City | Hindi_Marks | Maths_Marks | Grade |
---|---|---|---|---|---|---|---|---|
10 | Aman | Sharma | Lucknow | Chandigarh | Ghaziabad | 88 | 95 | A2 |
02 | Vishal | Sharma | Chandigarh | Ghaziabad | Ghaziabad | 95 | 82 | A1 |
07 | Raj | Gupta | Delhi | Ghaziabad | Lucknow | 91 | 95 | A1 |
04 | Yash | Singhania | Ghaziabad | Delhi | Lucknow | 85 | 82 | A2 |
11 | Vinay | Roy | Delhi | Kanpur | Ghaziabad | 95 | 97 | A1 |
16 | Manoj | Gupta | Ghaziabad | Meerut | Chandigarh | 95 | 90 | B1 |
19 | Ram | Gupta | Lucknow | Ghaziabad | Chandigarh | 89 | 95 | A2 |
查询1: 下面的SELECT查询在上述的Student_Grade表中使用了FIND_IN_SET函数,并使用了First_City、Second_City、New_City列:
SELECT First_City, Second_City, New_City FIND_IN_SET('Ghaziabad', First_City, Second_City, New_City) AS Ghaziabad_Findinset FROM Student_Grade;
这个SQL语句显示了Ghaziabad市在表格的三列中的位置。
输出:
First_City | Second_City | New_City | Ghaziabad_Findinset |
---|---|---|---|
Lucknow | Chandigarh | Ghaziabad | 3 |
Chandigarh | Ghaziabad | Ghaziabad | 3 |
Delhi | Ghaziabad | Lucknow | 2 |
Ghaziabad | Delhi | Lucknow | 1 |
Delhi | Kanpur | Ghaziabad | 3 |
Ghaziabad | Meerut | Chandigarh | 1 |
Lucknow | Ghaziabad | Chandigarh | 2 |
查询2: 以下SELECT查询使用FIND_IN_SET函数与上述Student_Grade表中Roll_No大于2的学生的Hindi_Marks和Maths_Marks列:
SELECT Roll_No, Hindi_Marks, Maths_Marks(95, Hindi_Marks, Maths_Marks) AS 95_Findinset FROM Student_Grade WHERE Roll_No > 2;
输出:
Roll_No | Hindi_Marks | Maths_Marks | 95_Findinset |
---|---|---|---|
07 | 91 | 95 | 2 |
04 | 85 | 82 | Null |
11 | 95 | 97 | 1 |
16 | 95 | 90 | 1 |
19 | 89 | 95 | 2 |