MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Как работи SOUNDEX() в MariaDB

В MariaDB, SOUNDEX() е вградена низова функция, която връща низа на Soundex от даден низ.

Soundex е фонетичен алгоритъм за индексиране на имена по звук, както се произнася на английски. Ако две думи звучат еднакво, те трябва да имат същия низ на Soundex. Ако две думи звучат сходно, но не съвсем еднакво, техният низ на Soundex може да изглежда подобно, но не съвсем същото.

Функцията приема един аргумент:низът, от който да върне низа на Soundex.

Синтаксис

Синтаксисът е така:

SOUNDEX(str)

Където str е низът, от който да се върне низът на Soundex.

Пример

Ето един основен пример:

SELECT SOUNDEX('Bat');

Резултат:

+----------------+
| SOUNDEX('Bat') |
+----------------+
| B300           |
+----------------+

Ето още един пример, който сравнява низа на Soundex, върнат от подобни, но различни, звучащи думи:

SELECT 
    SOUNDEX('Bat'),
    SOUNDEX('Cat'),
    SOUNDEX('Cap');

Резултат:

+----------------+----------------+----------------+
| SOUNDEX('Bat') | SOUNDEX('Cat') | SOUNDEX('Cap') |
+----------------+----------------+----------------+
| B300           | C300           | C100           |
+----------------+----------------+----------------+

И ето една, която сравнява думи, които не звучат еднакво:

SELECT 
    SOUNDEX('Apartment'),
    SOUNDEX('Vehicle'),
    SOUNDEX('Groceries');

Резултат:

+----------------------+--------------------+----------------------+
| SOUNDEX('Apartment') | SOUNDEX('Vehicle') | SOUNDEX('Groceries') |
+----------------------+--------------------+----------------------+
| A16353               | V240               | G6262                |
+----------------------+--------------------+----------------------+

Трябва да спомена, че тази функция имплементира оригиналния алгоритъм на Soundex, който първо изхвърля гласните и второ дублира. Това е в контраст с подобрената версия, която отхвърля първо дубликатите и второ гласните.

Също така стандартният низ на Soundex е дълъг четири знака, но SOUNDEX() на MariaDB функцията връща произволно дълъг низ. Следователно горните резултати включват нестандартни струни на Soundex.

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

SELECT 
    SOUNDEX('Apartment'),
    SOUNDEX('Vehicle'),
    SOUNDEX('Groceries')
FROM DUAL;

Резултат:

   SOUNDEX('APARTMENT')    SOUNDEX('VEHICLE')    SOUNDEX('GROCERIES') 
_______________________ _____________________ _______________________ 
A163                    V240                  G626                   

Точни съвпадения

Ето пример за двойки думи, които имат съвпадащ низ на Soundex, въпреки че са различни думи, с различни значения:

SELECT 
    SOUNDEX('Dam') AS Dam, 
    SOUNDEX('Damn') AS Damn, 
    SOUNDEX('Too') AS Too, 
    SOUNDEX('Two') AS Two;

Резултат:

+------+------+------+------+
| Dam  | Damn | Too  | Two  |
+------+------+------+------+
| D500 | D500 | T000 | T000 |
+------+------+------+------+

Пример за база данни

Ето пример за получаване на низа на Soundex от заявка за база данни:

SELECT 
    PetName, 
    SOUNDEX(PetName)
FROM Pets;

Резултат:

+---------+------------------+
| PetName | SOUNDEX(PetName) |
+---------+------------------+
| Fluffy  | F410             |
| Fetch   | F320             |
| Scratch | S632             |
| Wag     | W200             |
| Tweet   | T000             |
| Fluffy  | F410             |
| Bark    | B620             |
| Meow    | M000             |
+---------+------------------+

Можем също да използваме SOUNDEX() в WHERE клауза за връщане само на онези редове, които звучат като дадена дума:

SELECT 
    PetName, 
    SOUNDEX(PetName),
    SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');

Резултат:

+---------+------------------+-----------------+
| PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') |
+---------+------------------+-----------------+
| Wag     | W200             | W200            |
+---------+------------------+-----------------+

Въпреки това, може да предпочетете да използвате SOUNDS LIKE вместо това, което е по-сбит начин да направите същото.

Празен низ

Ето какво се случва, когато се подаде празен низ за всеки даден аргумент:

SELECT SOUNDEX('');

Резултат:

+-------------+
| SOUNDEX('') |
+-------------+
|             |
+-------------+

Нулеви аргументи

Предаването на null връща null :

SELECT SOUNDEX(null);

Резултат:

+---------------+
| SOUNDEX(null) |
+---------------+
| NULL          |
+---------------+

Липсващ аргумент

Извикване на SOUNDEX() с грешен брой аргументи или без подаване на аргументи води до грешка:

SELECT SOUNDEX();

Резултат:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SOUNDEX'

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как REGEXP_REPLACE() работи в MariaDB

  2. Връщане на произволни редове от таблица в MariaDB

  3. Инсталиране на MariaDB 10.1 в Debian Jessie и изпълнение на различни заявки за MariaDB

  4. Как да направите възстановяване по време на MySQL и MariaDB данни с помощта на ClusterControl

  5. Как да инсталирате MariaDB на CentOS 7 / RHEL 7