Is het mogelijk om binnen sql ook te machten op niet helemaal kloppende strings? Je kan zelf met like zeggen like="vul*" en like="*nis" maar dan zul je zelf moeten kapot breken. Het lijkt me dat zoiets al moet zijn uitgevonden.
SOUNDEX() en DIFFERENCE()
(in T-SQL that is)
(in T-SQL that is)
[ Voor 69% gewijzigd door curry684 op 09-06-2004 12:18 ]
Soundex kan dat bijvoorbeeld.
Yo dawg, I heard you like posts so I posted below your post so you can post again.
Maar is er ook een standaard sql constructie voor te vinden?
[edit]
Gaat eerst ff goed lezen voordat ie gaat blaten
[edit]
Gaat eerst ff goed lezen voordat ie gaat blaten
[ Voor 33% gewijzigd door Alarmnummer op 09-06-2004 12:25 ]
Ja
SoundEx is best traag, omdat je niet alleen een full-table scan doet maar ook nog eens een string-wise operation op die strings. SoundEx zelf is overigens redelijk simpel en snel dus, maar een en ander zal nog een fractie trager zijn dan er met LIKE overheen loopen.
Don't do this unless you know you want to
Don't do this unless you know you want to
Nee, SQL definieert standaard niet zulke functies. Je moet ofwel een functie ervoor implementeren (rotwerk enzo) ofwel moeten hopen dat dergelijke functies voor jouw db bestaan (bijv zoals bij postgresql in de contrib-afdeling).
't Nadeel van soundex is trouwens dat ie naar de "engelse klank" van een woord kijkt en die klank heel sterk van de beginletter laat afhangen (in het Nederlands zijn Cees en Kees vrijwel hetzelfde, maar soundex zou ze als totaal verschillend zien, terwijl Kees en Kelly vrij dicht bij elkaar zouden liggen).
Andere varianten zijn trouwens onder andere levenshtein en metaphone, de eerste bepaald het "klankverschil" tussen twee woorden en de andere doet zoiets als soundex maar dan wat beter en helaas ook weer nog meer op het engels gericht.
Check de uitleg op bijvoorbeeld php.net van die functies voor wat meer informatie:
http://www.php.net/soundex
http://www.php.net/metaphone
http://www.php.net/levenshtein
't Nadeel van soundex is trouwens dat ie naar de "engelse klank" van een woord kijkt en die klank heel sterk van de beginletter laat afhangen (in het Nederlands zijn Cees en Kees vrijwel hetzelfde, maar soundex zou ze als totaal verschillend zien, terwijl Kees en Kelly vrij dicht bij elkaar zouden liggen).
Andere varianten zijn trouwens onder andere levenshtein en metaphone, de eerste bepaald het "klankverschil" tussen twee woorden en de andere doet zoiets als soundex maar dan wat beter en helaas ook weer nog meer op het engels gericht.
Check de uitleg op bijvoorbeeld php.net van die functies voor wat meer informatie:
http://www.php.net/soundex
http://www.php.net/metaphone
http://www.php.net/levenshtein
't Voordeel van soundex is dat je er een functionele index van zou kunnen maken, iets dat met "vergelijkingsfuncties" weer niet kan.curry684 schreef op 09 juni 2004 @ 13:41:
JaSoundEx is best traag, omdat je niet alleen een full-table scan doet maar ook nog eens een string-wise operation op die strings. SoundEx zelf is overigens redelijk simpel en snel dus, maar een en ander zal nog een fractie trager zijn dan er met LIKE overheen loopen.
Don't do this unless you know you want to
Klopt niet helemaal, soundex kijkt naar het begin van het woord en de daarin voorkomende klanken.ACM schreef op 09 juni 2004 @ 13:43:
't Nadeel van soundex is trouwens dat ie naar de "engelse klank" van een woord kijkt en die klank heel sterk van de beginletter laat afhangen (in het Nederlands zijn Cees en Kees vrijwel hetzelfde, maar soundex zou ze als totaal verschillend zien, terwijl Kees en Kelly vrij dicht bij elkaar zouden liggen).
SQL:
1
2
3
| select difference('kees', 'cees'), difference('kees', 'kelly'), difference('kees', 'case'); |
Geeft 3 keer 3, oftewel een near-perfect score op allemaal (4 is nearly of completely identical, 0 is totally unrelated). Toegegeven, niet perfect maar goed bruikbaar
Voor een meesterlijke uitleg van madwizard inclusief werkende code van levenstein zie [rml]madwizard in "[ Algoritme (elke taal)] Verschillen tuss..."[/rml]
Helaas heeft ie de plaatjes ondertussen verwijderd, maar het is nog steeds helder
Pagina: 1