Finns det något smartare sätt i Ms Sql att ignorera svenska tecken i en sökning? Ett sätt är ju att lägga till ett extra fält som innehåller det sökbara begreppet (Malmo) så slipper man alla Replace(). Det kostar ju lite diskutrymme (databasen växer) och möjligen kan normaliserings-purister invända, men det kanske det är värt för dig? Visst det är ju en variant, problemet är bara att det är städer ifrån hela världen.... Kanske kolla på Hmm...ett annat förslag då. Låt säga att du definierar alla giltiga tecken i en sträng, t ex "ABCDEFGHIJKLMNOPQRSTUVWXYZ" och när du skall söka så ersätter du alla tecken i söksträngen som inte ingår bland de giltiga tecknena med ett ?...Då skulle ju "Malmö" bli "Malm?" Tycker att båda varianterna var bra. Hur får man in COLLATE med en fulltext sökning? BTW: Kan man sätta Latin1_General_CI_AI på en kolumn som man sedan indexerar och sedan gör sökningen på? Efter lite tester nu så verkar det inte funkar riktigt som jag vill när jag använder CONTAINS() med fulltextindexering. Nu var det många svar från dig på en gång Jesper... Visst, jag kom på att jag kunde sätte egenskapen direkt på kolumnen och skippa den i sql-satsen. Nä det är klart!Förbigå svenska tecken i sökning?
<code>
SELECT * FROM tbl WHERE
replace(replace(replace(city,'ä','a'),'ö','o'),'ä','a') LIKE '%Malmo%'
OR
city LIKE '%Malmo%'
</code>Sv: Förbigå svenska tecken i sökning?
Jag har sett många göra liknande lösningar när t ex ett kundregister skall sorteras. Vissa företag har ju AB först i namnet ( t ex "AB Cyklar och sånt") och då vill man kanske ändå att detta skall sorteras in under C utan att det för den skull står fel på fakturorna (vilket kan reta kunden). Då är det inte ovanligt att man lägger till ett fält till (SortName) där det står "Cyklar och sånt, AB" i st f "AB Cyklar och sånt".Sv:Förbigå svenska tecken i sökning?
Alltså inte bara svenska utan även 10000-tals andra med en massa konstiga tecken.
München, Châlons osv.Sv: Förbigå svenska tecken i sökning?
WHERE kolumn like '%malmo%' COLLATE xxxxxx_CI_AI
Där AI står för accent insensitive - om du väljer rätt collation, så kan du få den att tolka åäö som accenter också.
Jag tror att det (borde) funka med Latin_General...
/mickeSv: Förbigå svenska tecken i sökning?
Skulle det sedan dyka upp konstiga specialtecken som du inte förutsett så tar ju denna metod hand om det eftersom du definiera GILTIGA tecken och inte OGILTIGA.
Det kanske inte fungerar heller i ditt specifika fall, men det är i alla fall en idé :-)Sv:Förbigå svenska tecken i sökning?
Denna funkar ju utmärkt: COLLATE Latin1_General_CI_AI
(Om jag använder LIKE....)Sv: Förbigå svenska tecken i sökning?
<code>SELECT s.id,s.city,s.province
FROM tbl as s
INNER JOIN countries as c ON s.country=c.id
WHERE CONTAINS(c.*, '"*Malmö*"')
COLLATE Latin1_General_CI_AI</code>....funkar ju inte.Sv: Förbigå svenska tecken i sökning?
Sv:Förbigå svenska tecken i sökning?
Även fast jag sätter Latin1_General_CI_AI på aktuell kolumn och gör en omindexering så får jag samma resultat.
Det verkar ju inte heller gå att skicka in asterixer i detta fall, då spelar det ju ingen roll om jag kör en replace på "förbjudna tecken".
<code>CONTAINS(c.*, '"J*rf*lla"') </code>(Järfälla)
Någon som har ett tips på hur jag kan gå vidare?Sv: Förbigå svenska tecken i sökning?
Funkar det som du vill, eller är det fortfarande något som inte verkar gå?
Du kan ange COLLATE på en kolumn och söka mot den, så du slipper COLLATE i din SELECT.
Är det mer??
/mickeSv:Förbigå svenska tecken i sökning?
Men problemet är att jag använder CONTAINS, (fulltextindexering) och då verkar det inte spela någon roll hur jag gör.
Tips emottages här.
Sv: Förbigå svenska tecken i sökning?
Contains är inte SQL Server. Contains är Index Server = Fulltext index. Det ligger utanför SQL, då är det inte lätt att fixa till det i SQL... Det är kort sagt omöjligt.
/micke