Welcome to Sign in | Help
in Search

Cautare diacritice

Last post 01-29-2011, 10:58 PM by B_gd_n[ ]Sahlean. 8 replies.
Sort Posts: Previous Next
  •  01-04-2011, 9:01 AM 8582

    Cautare diacritice

    Am o baza de date SQL Server 2008 cu o tabela ce contine diacritice. utilizatorul are optiunile de a cauta in baza de date cu/fara diacritice. Rezultatele la cautare trebuie sa fie astfel :

    1. daca introduce "invatator" atunci in rezultat sa fie si cuvantul învăţător
    2. daca introduce "învăţător" sa gaseasca rezultatele ca si mai sus
    3. daca se introduce "invatatorul a facut" atunci sa imi returneze ceva de genul (învăţătorul a făcut)
    4. daca introduce "învăţătorul a făcut" atunci sa returneze ca si mai sus

    Multumesc !
  •  01-04-2011, 9:54 AM 8583 in reply to 8582

    Re: Cautare diacritice

    Ar trebui să foloseşti un collation Accent-Insensitive:


    CREATE TABLE Tabela (
    ID_Propozitie int IDENTITY PRIMARY KEY,
    Propozitie nvarchar(max) COLLATE Latin1_General_CI_AI NOT NULL
    )

    INSERT INTO Tabela VALUES (N'Învăţătorul a făcut ordine în clasă.')
    INSERT INTO Tabela VALUES (N'Bunicul meu a fost învăţător.')
    INSERT INTO Tabela VALUES (N'Mama mea este profesoară.')

    GO
    DECLARE @Cuvant nvarchar(100)=N'învăţător'

    SELECT * FROM Tabela WHERE Propozitie LIKE '%'+@Cuvant+'%'

    Răzvan
  •  01-04-2011, 10:56 AM 8584 in reply to 8583

    Re: Cautare diacritice

    Multumesc pentru promptitudinea raspunsului.

    As avea 2 intrebari.

    1. Daca scriu DECLARE @Cuvant nvarchar(100)=N'invatator' nu cred ca mai returneaza învăţător
    2. Cuvantul dupa care caut (@Cuvant) trebuie sa il dau dinamic pentru ca o sa vina din aplicatia ASP.NET si nu reusesc sa declar dinamic N'' + @Cuvant + ''' sau ceva de genul asta.

    Daca o sa mearga dupa un cuvant atunci ar merge si pentru expresii.

    Multumesc !
  •  01-04-2011, 11:55 AM 8585 in reply to 8584

    Re: Cautare diacritice

    1. Ba da, merge, ăsta e rolul lui AI din Latin1_General_CI_AI.
    2. Nu e nevoie de dynamic SQL; @Cuvant poate fi un parametru al procedurii stocate, important e să fie declarat ca nvarchar(n), nu ca varchar(n).

    Răzvan
  •  01-04-2011, 11:59 AM 8586 in reply to 8585

    Re: Cautare diacritice

    Testeaza punctul 1 daca nu-l crezi pe Razvan :)
    Exploreaza si full-text search. Ti-ar fi de folos.
  •  01-29-2011, 3:03 PM 8614 in reply to 8586

    Wild cards in patindex

    O intrebare legata de patindex.

    este string-ul urmator :

    tata si cu mama au mers acasa iar ea a fost la teatru

    si se cauta : "a"

    vreau sa imi gaseasca doar cuvantul "a" de dupa cuvantul "ea"

    NU vreau sa gaseasca a din tata, a din mama a din au, etc. ci doar cuvantul "a"(gramatical vorbind)

    am incercat : PATINDEX('[^a-z]'+@q+'[^a-z]',@Text)

    de ce nu imi gaseste pozitia respectiva ??
  •  01-29-2011, 3:39 PM 8615 in reply to 8614

    Re: Wild cards in patindex

    PATINDEX('%[^a-z]'+@q+'[^a-z]%',@Text)
    Rectificare:
    PATINDEX('%[^a-z]'+@q+'[^a-z]%',@Text) > 0
    OR PATINDEX(@q+'[^a-z]%',@Text)  > 0
    OR PATINDEX('%[^a-z]'+@q',@Text) > 0
  •  01-29-2011, 4:37 PM 8616 in reply to 8615

    Re: Wild cards in patindex

    Multumesc pentru rapuns ! A fost foarte folositor...cand ma gandesc un semn.....%

    Dar acum a aparut alta problema : in replace pot sa fac la fel ?

    REPLACE(@Text , '%[^a-z]' + @partOfSourceWord + '[^a-z]%' , 'replace word')

    Din nou nu merge. Poate am uitat iar ceva semn...
  •  01-29-2011, 10:58 PM 8617 in reply to 8616

    Re: Wild cards in patindex

View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems