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
廣告