MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Znajdź ciąg w ciągu w SQL

Większość głównych DBMS zapewnia nam sposób na znalezienie łańcucha w łańcuchu za pomocą SQL. Rozumiem przez to użycie zapytania SQL, aby znaleźć pozycję podciągu w ciągu.

Istnieje kilka funkcji SQL, które pozwalają nam to zrobić, w tym INSTR() , LOCATE() , POSITION() i CHARINDEX() . Funkcja, której użyjesz, będzie zależeć od Twojego DBMS i prawdopodobnie od tego, czy musisz określić pozycję początkową.

Wyrocznia

Oracle ma INSTR() funkcja, która zwraca początkową pozycję danego podciągu w ciągu.

Przykład:

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

Wynik:

5

To pokazuje nam, że podłańcuch fat zaczyna się na pozycji 5 w ciągu Big fat cat .

Możliwe jest określenie pozycji początkowej poprzez przekazanie trzeciego argumentu. Możemy również przekazać czwarty argument, aby określić, które wystąpienie ma zostać znalezione:

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

Wynik:

7

W tym przypadku zacząłem wyszukiwanie na pozycji 1 i szukał drugiego wystąpienia (używając 2 jako czwarty argument).

Oracle ma również funkcję INSTRB() funkcja, która robi podobną rzecz, z wyjątkiem tego, że zwraca pozycję w bajtach.

MySQL

MySQL ma funkcję INSTR() funkcja, która działa podobnie do funkcji Oracle Database o tej samej nazwie:

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

Wynik:

10

Jeśli jednak chcesz określić pozycję początkową, musisz użyć LOCATE() lub POSITION() :

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

Wynik:

31

Tutaj pierwsze wystąpienie cat zaczyna się od pozycji 5, ale określiłem, że wyszukiwanie zaczyna się od pozycji 6. Dlatego pozycja następnego wystąpienia tego ciągu była tą, która została zwrócona.

Zauważ, że chociaż wyszukiwanie rozpoczęło się na pozycji 6, funkcja nadal zwraca pozycję podciągu w ciągu – nie od pozycji początkowej.

POSITION() funkcja jest synonimem dwuargumentowej składni LOCATE() , ale z nieco inną składnią (POSITION() nie pozwala nam określić pozycji początkowej).

MySQL ma również funkcję REGEX_INSTR() funkcja zwracająca początkowy indeks podłańcucha ciągu, który pasuje do wyrażenia regularnego określonego przez określony wzorzec.

MariaDB

Podobnie jak MySQL, MariaDB ma również funkcję INSTR() funkcja, a także LOCATE() i POSITION() funkcja:

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

Wynik:

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

MariaDB ma również REGEX_INSTR() funkcja, która zwraca początkowy indeks podłańcucha ciągu, który pasuje do wyrażenia regularnego określonego przez określony wzorzec.

Serwer SQL

Jeśli chodzi o SQL Server, CHARINDEX() funkcja jest tym, czego szukamy:

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

Wynik:

17

W tym przypadku użyłem opcjonalnego trzeciego argumentu, aby określić pozycję początkową.

SQL Server ma również funkcję PATINDEX() funkcja, która wyszukuje wzorzec w ciągu.

SQLite

SQLite ma funkcję INSTR() funkcja do zaspokojenia naszych potrzeb:

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

Wynik:

2

PostgreSQL

W PostgreSQL musimy użyć POSITION() funkcja:

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

Wynik:

9

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Przecięcie indeksu MongoDB

  2. pymongo:nazwa 'ISODate' nie jest zdefiniowana

  3. TypeError:ObjectId ('') nie jest możliwy do serializacji w formacie JSON

  4. Automatyczne inkrementowanie w MongoDB w celu przechowywania sekwencji unikalnego identyfikatora użytkownika

  5. Znajdź obiekty między dwiema datami MongoDB