Sebagian besar DBMS utama memberi kita cara untuk menemukan string di dalam string menggunakan SQL. Dengan ini, maksud saya menggunakan kueri SQL untuk menemukan posisi substring dalam string.
Ada beberapa fungsi SQL yang memungkinkan kita melakukan ini, termasuk INSTR()
, LOCATE()
, POSITION()
, dan CHARINDEX()
. Fungsi yang Anda gunakan akan bergantung pada DBMS Anda, dan mungkin apakah Anda perlu menentukan posisi awal atau tidak.
Oracle
Oracle memiliki INSTR()
fungsi yang mengembalikan posisi awal substring tertentu dalam string.
Contoh:
SELECT INSTR('Big fat cat', 'fat')
FROM DUAL;
Hasil:
5
Ini menunjukkan kepada kita bahwa substring fat
dimulai dari posisi 5 dalam string Big fat cat
.
Dimungkinkan untuk menentukan posisi awal dengan memberikan argumen ketiga. Kami juga dapat memberikan argumen keempat untuk menentukan kemunculan mana yang akan ditemukan:
SELECT INSTR('That fat cat', 'at', 1, 2)
FROM DUAL;
Hasil:
7
Dalam hal ini saya memulai pencarian di posisi 1
dan mencari kemunculan kedua (dengan menggunakan 2
sebagai argumen keempat).
Oracle juga memiliki INSTRB()
fungsi yang melakukan hal serupa, kecuali mengembalikan posisi berdasarkan byte.
MySQL
MySQL memiliki INSTR()
fungsi yang melakukan hal yang mirip dengan fungsi Oracle Database dengan nama yang sama:
SELECT INSTR('Cats and dogs like to run', 'dogs');
Hasil:
10
Namun, jika Anda perlu menentukan posisi awal, Anda harus menggunakan LOCATE()
atau POSITION()
:
SELECT LOCATE('cat', 'One cat jumped over the other cat', 6);
Hasil:
31
Di sini, kemunculan pertama cat
dimulai pada posisi 5, tetapi saya menetapkan pencarian untuk memulai pada posisi 6. Oleh karena itu, posisi kemunculan berikutnya dari string itu adalah yang dikembalikan.
Perhatikan bahwa, meskipun pencarian dimulai pada posisi 6, fungsi tersebut masih mengembalikan posisi substring dalam string – bukan dari posisi awal.
POSITION()
function adalah sinonim untuk sintaks dua argumen LOCATE()
, tetapi dengan sintaks yang sedikit berbeda (POSITION()
tidak mengizinkan kami untuk menentukan posisi awal).
MySQL juga memiliki REGEX_INSTR()
fungsi yang mengembalikan indeks awal dari substring string yang cocok dengan ekspresi reguler yang ditentukan oleh pola yang ditentukan.
MariaDB
Seperti MySQL, MariaDB juga memiliki INSTR()
fungsi, serta a LOCATE()
dan POSITION()
fungsi:
SELECT
INSTR('No news is good news', 'news') AS "INSTR",
POSITION('news' IN 'No news is good news') AS "POSITION",
LOCATE('news', 'No news is good news') AS "LOCATE 1",
LOCATE('news', 'No news is good news', 5) AS "LOCATE 2";
Hasil:
+-------+----------+----------+----------+ | INSTR | POSITION | LOCATE 1 | LOCATE 2 | +-------+----------+----------+----------+ | 4 | 4 | 4 | 17 | +-------+----------+----------+----------+
MariaDB juga memiliki REGEX_INSTR()
fungsi yang mengembalikan indeks awal dari substring string yang cocok dengan ekspresi reguler yang ditentukan oleh pola yang ditentukan.
SQL Server
Ketika datang ke SQL Server, CHARINDEX()
fungsi yang kami cari:
SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16);
Hasil:
17
Dalam hal ini saya menggunakan argumen ketiga opsional untuk menentukan posisi awal.
SQL Server juga memiliki PATINDEX()
fungsi yang mencari pola dalam string.
SQLite
SQLite memiliki INSTR()
berfungsi untuk memenuhi kebutuhan kita:
SELECT INSTR('Black cat', 'lack');
Hasil:
2
PostgreSQL
Di PostgreSQL, kita perlu menggunakan POSITION()
fungsi:
SELECT POSITION('Break' IN 'Bangkok Breaking');
Hasil:
9