W MariaDB, SOUNDEX()
jest wbudowaną funkcją ciągu, która zwraca ciąg Soundex z podanego ciągu.
Soundex to algorytm fonetyczny służący do indeksowania nazw według dźwięku wymawianego w języku angielskim. Jeśli dwa słowa brzmią tak samo, powinny mieć ten sam ciąg Soundex. Jeśli dwa słowa brzmią podobnie, ale nie dokładnie tak samo, ich ciąg Soundex może wyglądać podobnie, ale nie dokładnie tak samo.
Funkcja przyjmuje jeden argument:ciąg, z którego ma zostać zwrócony ciąg Soundex.
Składnia
Składnia wygląda tak:
SOUNDEX(str)
Gdzie str
jest ciągiem, dla którego należy zwrócić ciąg Soundex.
Przykład
Oto podstawowy przykład:
SELECT SOUNDEX('Bat');
Wynik:
+----------------+ | SOUNDEX('Bat') | +----------------+ | B300 | +----------------+
Oto kolejny przykład porównujący ciąg Soundex zwrócony z podobnych, ale inaczej brzmiących słów:
SELECT
SOUNDEX('Bat'),
SOUNDEX('Cat'),
SOUNDEX('Cap');
Wynik:
+----------------+----------------+----------------+ | SOUNDEX('Bat') | SOUNDEX('Cat') | SOUNDEX('Cap') | +----------------+----------------+----------------+ | B300 | C300 | C100 | +----------------+----------------+----------------+
A oto jeden, który porównuje słowa, które nie brzmią podobnie:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries');
Wynik:
+----------------------+--------------------+----------------------+ | SOUNDEX('Apartment') | SOUNDEX('Vehicle') | SOUNDEX('Groceries') | +----------------------+--------------------+----------------------+ | A16353 | V240 | G6262 | +----------------------+--------------------+----------------------+
Powinienem wspomnieć, że ta funkcja implementuje oryginalny algorytm Soundex, który odrzuca samogłoski jako pierwsze, a duplikuje jako drugie. Jest to w przeciwieństwie do ulepszonej wersji, która odrzuca duplikaty jako pierwsze, a samogłoski jako drugie.
Ponadto standardowy ciąg Soundex ma długość czterech znaków, ale funkcja MariaDB SOUNDEX()
funkcja zwraca dowolnie długi ciąg. Dlatego powyższe wyniki uwzględniają niestandardowe struny Soundex.
Aby zilustrować, co mam na myśli, oto wynik, który otrzymuję, używając funkcji SOUNDEX()
Oracle funkcja, aby zrobić to samo:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries')
FROM DUAL;
Wynik:
SOUNDEX('APARTMENT') SOUNDEX('VEHICLE') SOUNDEX('GROCERIES') _______________________ _____________________ _______________________ A163 V240 G626
Dopasowania ścisłe
Oto przykład par słów, które mają pasujący ciąg Soundex, mimo że są to różne słowa o różnych znaczeniach:
SELECT
SOUNDEX('Dam') AS Dam,
SOUNDEX('Damn') AS Damn,
SOUNDEX('Too') AS Too,
SOUNDEX('Two') AS Two;
Wynik:
+------+------+------+------+ | Dam | Damn | Too | Two | +------+------+------+------+ | D500 | D500 | T000 | T000 | +------+------+------+------+
Przykład bazy danych
Oto przykład pobierania ciągu Soundex z zapytania do bazy danych:
SELECT
PetName,
SOUNDEX(PetName)
FROM Pets;
Wynik:
+---------+------------------+ | PetName | SOUNDEX(PetName) | +---------+------------------+ | Fluffy | F410 | | Fetch | F320 | | Scratch | S632 | | Wag | W200 | | Tweet | T000 | | Fluffy | F410 | | Bark | B620 | | Meow | M000 | +---------+------------------+
Możemy również użyć SOUNDEX()
w WHERE
klauzula zwracająca tylko te wiersze, które brzmią jak dane słowo:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');
Wynik:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+
Możesz jednak chcieć użyć SOUNDS LIKE
zamiast tego, co jest bardziej zwięzłym sposobem robienia tego samego.
Pusty ciąg
Oto, co się dzieje, gdy dla każdego podanego argumentu zostanie przekazany pusty ciąg:
SELECT SOUNDEX('');
Wynik:
+-------------+ | SOUNDEX('') | +-------------+ | | +-------------+
Argumenty zerowe
Przekazywanie null
zwraca null
:
SELECT SOUNDEX(null);
Wynik:
+---------------+ | SOUNDEX(null) | +---------------+ | NULL | +---------------+
Brakujący argument
Wywołanie SOUNDEX()
z niewłaściwą liczbą argumentów lub bez przekazania jakichkolwiek argumentów powoduje błąd:
SELECT SOUNDEX();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SOUNDEX'