Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách hàm PATINDEX () hoạt động trong SQL Server (T-SQL)

Trong SQL Server, bạn có thể sử dụng T-SQL PATINDEX() hàm để tìm một mẫu trong một chuỗi. Cụ thể, hàm chỉ trả về đầu tiên sự xuất hiện của mẫu trong chuỗi.

Hàm chấp nhận hai đối số; mẫu và chuỗi.

Bạn có thể sử dụng các ký tự đại diện trong mẫu.

Cú pháp

Cú pháp như sau:

 PATINDEX ('% mẫu%', biểu thức) 

Ở đâu mẫu là một biểu thức ký tự chứa trình tự được tìm thấy và biểu thức là biểu thức được tìm kiếm.

Ví dụ 1 - Cách sử dụng cơ bản

Dưới đây là một ví dụ về cách nó hoạt động:

 SELECT PATINDEX ('% eer%', 'Bob thích bia.') AS Kết quả; 

Kết quả:

 + ---------- + | Kết quả || ---------- || 12 | + ---------- + 

Dấu phần trăm (% ) là một ký tự đại diện đại diện cho bất kỳ chuỗi nào không hoặc nhiều ký tự.

Ví dụ 2 - Không phù hợp

Dưới đây là những gì sẽ xảy ra khi chúng tôi không bao gồm các ký tự đại diện:

 SELECT PATINDEX ('eer', 'Bob thích bia.') AS Kết quả; 

Kết quả:

 + ---------- + | Kết quả || ---------- || 0 | + ---------- + 

Mặc dù, nếu chuỗi đầy đủ khớp với mẫu mà không có bất kỳ ký tự đại diện nào, bạn sẽ nhận được một khớp:

 CHỌN PATINDEX ('Bob', 'Bob') AS Kết quả; 

Kết quả:

 + ---------- + | Kết quả || ---------- || 1 | + ---------- + 

Tuy nhiên, bạn sẽ không nhận được kết quả phù hợp nếu chuỗi chứa nhiều ký tự hơn:

 SELECT PATINDEX ('Bob', 'Bob thích bia.') AS Kết quả; 

Kết quả:

 + ---------- + | Kết quả || ---------- || 0 | + ---------- + 

Trong trường hợp đó, bạn có thể sử dụng một ký tự đại diện duy nhất:

 SELECT PATINDEX ('Bob%', 'Bob thích bia.') AS Kết quả; 

Kết quả:

 + ---------- + | Kết quả || ---------- || 1 | + ---------- + 

Bạn cũng có thể sử dụng một ký tự đại diện duy nhất ở giữa mẫu:

 SELECT PATINDEX ('B% r.', 'Bob thích bia.') AS Kết quả; 

Kết quả:

 + ---------- + | Kết quả || ---------- || 1 | + ---------- + 

Trong trường hợp này, chúng tôi có một kết quả khớp vì phần đầu và phần cuối của chuỗi khớp với phần đầu và phần cuối của mẫu. Tất nhiên, phần giữa của chuỗi cũng khớp với phần giữa của mẫu, vì tất cả các ký tự khác đều được bao phủ bởi dấu phần trăm.

Ví dụ 3 - Ký tự đại diện gạch dưới

Dưới đây là một ví dụ khác mà chúng tôi giới thiệu một ký tự đại diện khác:

 SELECT PATINDEX ('B_er', 'Beer') AS Kết quả; 

Kết quả:

 + ---------- + | Kết quả || ---------- || 1 | + ---------- + 

Dấu gạch dưới (_ ) là một ký tự đại diện cho bất kỳ ký tự đơn nào. Do đó, nó sẽ chỉ khớp nếu có chính xác một ký tự ở vị trí đó.

Tất nhiên, mẫu trên có thể phù hợp với nhiều dây khác nhau. Ví dụ:

 SELECT PATINDEX ('B_er', 'Beer') AS 'Beer', PATINDEX ('B_er', 'Bier') AS 'Bier', PATINDEX ('B_er', 'Baer') AS 'Baer', PATINDEX ('B_er', "B er") NHƯ "B er"; 

Kết quả:

 + -------- + -------- + -------- + -------- + | Bia | Bier | Baer | B ờ || -------- + -------- + -------- + -------- || 1 | 1 | 1 | 1 | + -------- + -------- + -------- + -------- + 

Ví dụ 4 - So sánh _% Các ký tự đại diện

Ví dụ này cho thấy sự khác biệt giữa _% ký tự đại diện.

 SELECT PATINDEX ('B% r', 'Beer') AS '%', PATINDEX ('B_r', 'Beer') AS '_', PATINDEX ('B__r', 'Beer') AS '__'; 

Kết quả:

 + ----- + ----- + ------ + | % | _ | __ || ----- + ----- + ------ || 1 | 0 | 1 | + ----- + ----- + ------ + 

Dấu gạch dưới chỉ khớp khi có đúng một ký tự ở vị trí đó. Để khớp hai ký tự, chúng ta cần sử dụng hai dấu gạch dưới.

Mặt khác, dấu phần trăm khớp với bất kỳ số ký tự nào, kể cả số 0, như được thấy trong ví dụ sau:

 SELECT PATINDEX ('Bee% r', 'Beer') AS '%', PATINDEX ('Bee_r', 'Beer') AS '_', PATINDEX ('Bee__r', 'Beer') AS '__'; 

Kết quả:

 + ----- + ----- + ------ + | % | _ | __ || ----- + ----- + ------ || 1 | 0 | 0 | + ----- + ----- + ------ + 

Ví dụ 5 - Ví dụ về Cơ sở dữ liệu

Dưới đây là một ví dụ về việc sử dụng hàm này trong truy vấn cơ sở dữ liệu:

 SỬ DỤNG Nhạc; CHỌN AlbumName, PATINDEX ('% the%', AlbumName) AS 'Chỉ mục mẫu'FROM AlbumWHERE PATINDEX ('% the% ', AlbumName)> 0; 

Kết quả:

 + ------------------------- + ----------------- + | AlbumName | Chỉ số mẫu || ------------------------- + ----------------- || Hát Xuống Ngõ | 14 || Ziltoid the Omniscient | 9 || Không cầu nguyện cho người chết | 15 || Mười sáu người đàn ông của Tain | 1 | + ------------------------- + ----------------- + 

Trong trường hợp này, tôi sử dụng WHERE mệnh đề để chỉ trả lại những album thực sự khớp, cùng với PATINDEX() của chúng kết quả. Nếu tôi đánh rơi WHERE , tất cả các album sẽ được trả lại, bất kể chúng có khớp hay không.

Đối với những nội dung không khớp, PATINDEX() kết quả sẽ là không.

 SỬ DỤNG Âm nhạc; CHỌN ĐẦU (10) Tên Album, PATINDEX ('% the%', Tên Album) NHƯ 'Chỉ mục Mẫu'FROM Album; 

Kết quả:

 + ------------------------- + ----------------- + | AlbumName | Chỉ số mẫu || ------------------------- + ----------------- || Powerslave | 0 || Nguồn điện | 0 || Hát Xuống Ngõ | 14 || Ziltoid the Omniscient | 9 || Thương vong của Cool | 0 || Epicloud | 0 || Một nơi nào đó trong thời gian | 0 || Piece of Mind | 0 || Kẻ giết người | 0 || Không cầu nguyện cho người chết | 15 | + ------------------------- + ----------------- +  

Ví dụ 6 - Chỉ xuất hiện lần đầu

Như đã đề cập, PATINDEX() chỉ trả về đầu tiên sự xuất hiện của mẫu trong chuỗi.

 SELECT PATINDEX ('% and%', 'Bob and beer and popcorn.') AS Kết quả; 

Kết quả:

 + ---------- + | Kết quả || ---------- || 5 | + ---------- + 

CHARINDEX() Chức năng

T-SQL CHARINDEX() chức năng tương tự như PATINDEX() . Tuy nhiên, có một số khác biệt giữa hai. Đặc biệt, PATINDEX() chấp nhận các ký tự đại diện, nhưng không chấp nhận vị trí bắt đầu. CHARINDEX() mặt khác, chấp nhận một vị trí bắt đầu, nhưng không chấp nhận các ký tự đại diện.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Điền các ngày còn thiếu theo nhóm

  2. Di chuyển Cơ sở dữ liệu SQL Server sang Đám mây

  3. Xóa dữ liệu thông qua một hàm có giá trị bảng trong SQL Server

  4. Biểu diễn của DateTime tính bằng mili giây?

  5. Cách sử dụng thủ tục lưu trữ ‘sp_server_info’ trong SQL Server