SQL - PATINDEX() 函数



SQL 的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 查询将 PATINDEX() 函数与上述 CUSTOMERS 表的 Name 列一起使用。

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 查询将 LOWER 函数与上述 CUSTOMERS 表的 NAME、ADDRESS 列一起使用。

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       |
+---------+---------------+-----------+------------+
sql-string-functions.htm
广告