MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Намерете низ в низ в SQL

Повечето от основните СУБД ни предоставят начин за намиране на низ в низ с помощта на SQL. Под това имам предвид използването на SQL заявка за намиране на позицията на подниз в низ.

Има няколко SQL функции, които ни позволяват да направим това, включително INSTR() , LOCATE() , POSITION() и CHARINDEX() . Функцията, която използвате, ще зависи от вашата СУБД и евентуално дали трябва да посочите начална позиция или не.

Оракул

Oracle има INSTR() функция, която връща началната позиция на даден подниз в низ.

Пример:

SELECT INSTR('Big fat cat', 'fat')
FROM DUAL;

Резултат:

5

Това ни показва, че поднизът fat започва от позиция 5 в низа Big fat cat .

Възможно е да посочите начална позиция чрез предаване на трети аргумент. Можем също да предадем четвърти аргумент, за да посочим кое събитие да намерим:

SELECT INSTR('That fat cat', 'at', 1, 2)
FROM DUAL;

Резултат:

7

В този случай започнах търсенето на позиция 1 и потърси второто появяване (чрез използване на 2 като четвърти аргумент).

Oracle също има INSTRB() функция, която прави подобно нещо, с изключение на това, че връща позицията в байтове.

MySQL

MySQL има INSTR() функция, която прави нещо подобно на едноименната функция на Oracle Database:

SELECT INSTR('Cats and dogs like to run', 'dogs');

Резултат:

10

Ако обаче трябва да посочите начална позиция, ще трябва да използвате или LOCATE() или POSITION() :

SELECT LOCATE('cat', 'One cat jumped over the other cat', 6);

Резултат:

31

Тук е първото поява на cat започва от позиция 5, но посочих търсенето да започне от позиция 6. Следователно позицията на следващото появяване на този низ беше тази, която беше върната.

Имайте предвид, че въпреки че търсенето е започнало на позиция 6, функцията все още връща позицията на подниза в низа – не от началната позиция.

POSITION() функцията е синоним на синтаксиса с два аргумента на LOCATE() , но с малко по-различен синтаксис (POSITION() не ни позволява да посочим начална позиция).

MySQL също има REGEX_INSTR() функция, която връща началния индекс на подниза на низа, който съответства на регулярния израз, определен от посочения шаблон.

MariaDB

Подобно на MySQL, MariaDB също има INSTR() функция, както и a LOCATE() и POSITION() функция:

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";

Резултат:

+-------+----------+----------+----------+
| INSTR | POSITION | LOCATE 1 | LOCATE 2 |
+-------+----------+----------+----------+
|     4 |        4 |        4 |       17 |
+-------+----------+----------+----------+

MariaDB също има REGEX_INSTR() функция, която връща началния индекс на подниза на низа, който съответства на регулярния израз, определен от посочения шаблон.

SQL сървър

Когато става въпрос за SQL Server, CHARINDEX() функцията е това, което търсим:

SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16);

Резултат:

17

В този случай използвах незадължителния трети аргумент, за да посоча начална позиция.

SQL Server също има PATINDEX() функция, която търси шаблон в низ.

SQLite

SQLite има INSTR() функция за задоволяване на нашите нужди:

SELECT INSTR('Black cat', 'lack');

Резултат:

2

PostgreSQL

В PostgreSQL трябва да използваме POSITION() функция:

SELECT POSITION('Break' IN 'Bangkok Breaking');

Резултат:

9

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да върнете само стойност на поле в mongodb

  2. Какво е новото в MongoDB 4.4

  3. MongoDB - размерът на файла е огромен и расте

  4. Включете всички съществуващи полета и добавете нови полета към документа

  5. Извличане на стойност от MongoDB по нейното ключово име