Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[SQL] Hoe trema's, accent aigu, etc. negeren in query?

Pagina: 1
Acties:

  • ThaStealth
  • Registratie: Oktober 2004
  • Laatst online: 17-11 15:47
Hoi,

Voor een zoekfunctie (naar persoonsnamen) in een klein projectje is handig om een query te hebben die alle namen met een (gedeeltelijk matchende) string retourneert. Dit op zich is geen probleem (LIKE en % logica). Hetvolgende lukt me dan ook:

Invoerstring: ka
Result:
Kas
Kant
Erdkamp

Echter lukt hetvolgende niet:

Invoerstring: ko
Result
Kok
Kolk

Maar geen
Kök

Hoe kan ik mijn query zo aanpassen dat hij de trema's en accenten en al die ongein negeert en gewoon Kök ook teruggeeft bij Kok en Kolk?. Googlen was helaas geen succes omdat ik geen idee heb hoe die ongein in het Engels heet...

Mess with the best, die like the rest


  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10 14:25
Zover ik weet kan dat niet zomaar in standaard SQL... om welke database gaat het ?

Btw, 'diacritics'

[ Voor 11% gewijzigd door reddevil op 04-03-2008 12:06 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Je zegt SQL, maar naar welke database praat je tegenaan? En vanwaaruit probeer je die query te draaien? (ik denk dat ik de antwoorden wel weet, maar 't geeft even aan wat er o.a. mist aan je topic ;))




Ik lees her en der topics dat de juiste locale collate je probleem zou moeten verhelpen. Zie bijvoorbeeld: http://forums.mysql.com/read.php?10,197256,197256#msg-197256

[ Voor 30% gewijzigd door BtM909 op 04-03-2008 12:08 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • ThaStealth
  • Registratie: Oktober 2004
  • Laatst online: 17-11 15:47
Oeps, sorry vergeten erbij te vermelden.
Het gaat om een Access database (jaja ik weet). Er word verbinding gemaakt met de Jet Ole DB 4.0. Bron is C# applicatie in .net 2.0

[ Voor 11% gewijzigd door ThaStealth op 04-03-2008 12:08 ]

Mess with the best, die like the rest


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Kan niet, het punt is dat ö niet hetzelfde is als o, ookal ziet hij er ong. hetzelfde uit

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • CrashOne
  • Registratie: Juli 2000
  • Niet online

CrashOne

oOoOoOoOoOoOoOoOoOo

In Sql Server zou je naar je collation moeten kijken (AI), dus mocht je daar ooit naar upgraden dan heb je die oplossing iig al.

Huur mij in als freelance SEO consultant!


Verwijderd

Misschien ranzig, maar als je een like o hebt, hier hardcoded wat omheen hatseflatsen wat tevens ö, ó en dergelijken zoekt?

  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10 14:25
Verwijderd schreef op dinsdag 04 maart 2008 @ 12:28:
Misschien ranzig, maar als je een like o hebt, hier hardcoded wat omheen hatseflatsen wat tevens ö, ó en dergelijken zoekt?
imo beter dan een extra kolom maken uppercase zonder diacritics, maar goed... vele wegen leiden naar Rome ;)

  • ThaStealth
  • Registratie: Oktober 2004
  • Laatst online: 17-11 15:47
Verwijderd schreef op dinsdag 04 maart 2008 @ 12:28:
Misschien ranzig, maar als je een like o hebt, hier hardcoded wat omheen hatseflatsen wat tevens ö, ó en dergelijken zoekt?
het probleem is dan wel dat als ik een o en een e en een u en een a etc. heb ik een string dat ik dan weetikveel hoeveel mogelijkheden moet bouwen voor elke keer dat zo'n ding voorkomt... als voorlopige oplossing heb ik maar een wildcard toegevoegd, dus als de gebruiker wil dat er o en ö getoond word moet er met een _ gewerkt word, dat dan ook de u, e, en a getoond wordt is een nare bijkomstigheid, maar dat is weer op te lossen door een filtering toe te passen zodat alleen o en ö en de andere tekens op de o doorgelaten worden... Betere oplossing heb ik tot nu nog niet :(

Mess with the best, die like the rest


  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 21-10 20:21

Not Pingu

Dumbass ex machina

Waarom in SQL? Als je op applicatieniveau gewoon je zoekstring omzet naar een diacritics-loze string dan werkt je LIKE statement gewoon (zolang je dezelfde diacritic-filtering toepast op de content waarbinnen je zoekt).

En dat omzetten van karakters kan simpel met een paar regular expressions:
code:
1
2
3
[èéêë] -> replace met 'e', analoog voor hoofdletter E
[ìíîï] -> replace met 'i', analoog voor hoofdletter I
etc.

[ Voor 34% gewijzigd door Not Pingu op 04-03-2008 14:46 ]

Certified smart block developer op de agile darkchain stack. PM voor info.


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Je kan iets als LIKE "k[oöóòô]*" gebruiken.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

EfBe schreef op dinsdag 04 maart 2008 @ 12:12:
Kan niet, het punt is dat ö niet hetzelfde is als o, ookal ziet hij er ong. hetzelfde uit
Heeft niet vrijwel ieder database systeem een collation waarin diakritische tekens genegeerd worden, juist omdat het heel voor de hand liggend is dat iemand die 'cafe' intikt eigenlijk een 'café' zoekt? Die collations zijn misschien minder geschikt als je voor de Zweedse of Servische markt aan het programmeren bent, maar voor Nederland, de VS en zelfs Frankrijk is het erg prettig dat dat soort collations bestaan. In het Frans zijn de diverse varianten van de e ook geen aparte letters, zoals de A met een rondje erboven dat in het Zweeds wel is (komt na de z in het alfabet). De ö is in het Zweeds wel een aparte letter, maar in het Duits niet.

[ Voor 16% gewijzigd door Confusion op 05-03-2008 08:54 ]

Wie trösten wir uns, die Mörder aller Mörder?


Verwijderd

EfBe schreef op dinsdag 04 maart 2008 @ 12:12:
Kan niet, het punt is dat ö niet hetzelfde is als o, ookal ziet hij er ong. hetzelfde uit
Kan wel;
SQL:
1
SELECT * from contact where left(contact_naam COLLATE SQL_Latin1_General_Cp850_CI_AI ,1) LIKE ('o') COLLATE SQL_Latin1_General_Cp850_CI_AI

Dat is een voorbeeldje 8)
Pagina: 1