SQL PATINDEX() 函数
PATINDEX() 函数用于检索表达式中模式的位置。它接受两个参数,表示模式和表达式,并返回指定列中给定模式第一次出现的起始位置。如果在表达式中找不到指定模式,则返回0。
使用该函数进行搜索是不区分大小写的,即不同大小写的相同字符(”a” 和 “A”)被视为一个字符。表达式中的第一个位置从1开始。
如果我们将列名作为参数传递给此函数,表达式可以是字符串或列的名称,此函数将返回每列中模式的索引(如果模式不存在,则为0)。
语法
以下是 PATINDEX() 函数的语法 –
PATINDEX('pattern', expression )
参数
- pattern - 包含要查找的字符序列的表达式。
-
expression - 字符串或您需要查找模式索引的列的名称。
示例
以下SELECT查询显示了给定字符串中单词“Ocean”的PATINDEX。
SELECT PATINDEX( '%OCEAN%', 'PACIFIC OCEAN') AS PATINDEX_OCEAN;
输出
以下是上述查询的输出结果 –
+----------------+
| PATINDEX_OCEAN |
+----------------+
| 9 |
+----------------+
示例
以下SELECT查询返回原始字符串中字符串“Manufacturing Company”的PATINDEX。
SELECT PATINDEX( '%Educate_Company%', 'Tutorialspoint is the Online Educate Company') AS PATINDEX_Educate_Company;
输出
以下是上面查询的结果:
+-------------------------+
|PATINDEX_Educate_Company |
+-------------------------+
| 30 |
+-------------------------+
示例
以下SELECT查询显示了原始字符串中字符’T’的PATINDEX。
SELECT PATINDEX( '%T%', 'TUTORIALSPOINT')AS PATINDEX_T;
输出
以下是上述查询的输出 –
+-----------+
|PATINDEX_T |
+-----------+
| 1 |
+-----------+
示例
以下SELECT查询显示了PATINDEX,其中我们给出的字符在原始字符串中不存在,因此返回0。
SELECT PATINDEX( '%B%', 'TUTORIALSPOINT')AS PATINDEX_B;
输出
以下是上述查询的输出结果-
+-----------+
|PATINDEX_B |
+-----------+
| 0 |
+-----------+
示例
您可以将表列作为参数传递给 PATINDEX() 函数,将字符或字符串转换为 PATINDEX() 函数。假设我们使用以下 CREATE 语句创建了一个名为 Customers 的表-
create table CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR(15) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(25),
SALARY DECIMAL(10, 4), PRIMARY KEY(ID)
);
现在让我们使用INSERT语句将 七条 记录插入到customers表中,如下所示:-
insert INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(1, 'Ramesh', 32, 'Ahmedabad', 2000.00);
insert INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(2, 'Khilan', 25, 'Delhi', 1500.00);
insert INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(3, 'kaushik', 23, 'Kota', 2000.00);
insert INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(4, 'Chaitali', 25, 'Mumbai', 6500.00);
insert INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(5, 'Hardik', 27, 'Bhopal', 8500.00);
insert INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(6, 'Komal', 22, 'MP', 4500.00);
insert INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(7, 'Muffy', 24, 'Indore', 10000.00);
以下SELECT查询在上述CUSTOMERS表格的Name列中使用了PATINDEX()函数。
SELECT NAME, PATINDEX('%a%', NAME) AS PATINDEX_a FROM CUSTOMERS;
输出
以下是上述查询的输出结果-
+---------+---------------+
| NAME | PATINDEX_a |
+---------+---------------+
| Ramesh | 2 |
| Khilan | 5 |
| kaushik| 2 |
| Chaitali| 3 |
| Hardik | 2 |
| Komal | 4 |
| Muffy | 0 |
+---------+---------------+
示例
以下SELECT查询使用了上述CUSTOMERS表中的NAME、ADDRESS列,并且使用了LOWER函数。
SELECT NAME, PATINDEX('%i%', NAME) AS PATINDEX_i, ADDRESS, PATINDEX('%a%', ADDRESS) AS PATINDEX_a FROM CUSTOMERS;
输出
以下是上述查询的输出结果-
+---------+---------------+-----------+------------+
| NAME | PATINDEX_i | ADDRESS | PATINDEX_a |
+---------+---------------+-----------+------------+
| Ramesh | 0 | Ahmedabad | 1 |
| Khilan | 3 | Delhi | 0 |
| kaushik| 6 | kota | 4 |
| Chaitali| 4 | Mumbai | 5 |
| Hardik | 5 | Bhopal | 5 |
| Komal | 0 | MP | 0 |
| Muffy | 0 | Indore | 0 |
+---------+---------------+-----------+------------+