Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 17 su 17

Hybrid View

  1. #1
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    in riferimento all'eventualità di usare caratteri jolly (anziché espressioni regolari) prova a dare uno sguardo qui:

    [ ] (Wildcard - Character(s) to Match) (Transact-SQL)

    Grossomodo puoi definire una classe di caratteri proprio come avviene per le espressioni regolari.
    Bisogna solo capire se il tipo di db che stai usando supporta questa roba
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  2. #2
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,812
    ottimo!
    nel frattempo ho provato col carattere jolly "_" sostituendo tutte le vocali.
    il risultato è buono e solo in certi contesti da troppi risultati.
    poi si potrebbe assegnare un valore di maggior corrispondenza ai risultati, ma bisogna valutarne l'utilità in base al progetto.

    invece, quello che hai proposto, è decisamente meglio e perfetto.
    passo la variabile al replace per aggiungere i caratteri accentati:
    codice:
        val=replace(trim(request("val")),"'","''")
        valNome=replace(val,"a","[aà]")
        valNome=replace(valNome,"i","[iì]")
        valNome=replace(valNome,"u","[uù]")
        valNome=replace(valNome,"o","[oò]")
        valNome=replace(valNome,"e","[eèé]")
    
        'poi costruisco la query inserendo la variabile modificata
        ... where nome LIKE '%"&valNome&"%' ...

    sarebbe più elegante chiamare una funzione per la variabile in questione, tipo
    codice:
    ... where nome LIKE funzione('%"&val&"%') ...
    ma non ho trovato modo per farla fungere, dite che c'è modo?

    grazie andrea mi sei stato molto di aiuto

  3. #3
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    grazie andrea mi sei stato molto di aiuto
    mi fa piacere si sia risolto

    codice:
    ... where nome LIKE funzione('%"&val&"%') ...
    humm, forse mi sfugge qualcosa, ma a questo punto non potresti richiamare la funzione fuori dalla stringa che definisce la query, cioè concatenandola alla stringa stessa?

    così:
    codice:
    ... where nome LIKE '%" & funzione(val) & "%' ...

    Chiaramente la funzione stessa dovrà restituire il risultato elaborato del valore che le stai passando.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  4. #4
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,812
    dopo diversi tentativi sono riuscito a far digerire la scrittura delle funzione all'interno delle query...
    ma si va incontro ad un ameno fenomeno di ridondanza se si chiama la funzione più di una volta.
    in sostanza si riscrivono i replace ad ogni chiamata delle funzione...

    quindi la mia soluzione, funzionante, per ora è questa:
    codice:
    function accentate(str)
        str=replace(str,"a","[aà]")
        str=replace(str,"i","[iì]")
        str=replace(str,"u","[uù]")
        str=replace(str,"o","[oò]")
        str=replace(str,"e","[eèé]")
        accentate=str
    end function
    
    
        val=replace(trim(request("val")),"'","''")
        valore=val
        valore=accentate(valore)
    
    
    
    SQL: 
    where  nome LIKE '%"&valore&"%' OR cognome LIKE '%"&valore&"%'  OR email LIKE '%"&val&"%' ecc....
    da notare che val e valore devono essere diversi (la funzione va invocata su valore), altrimenti si va incontro alla ridondanza del replace


    e per oggi è tutto, buona serata.

  5. #5
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    ma si va incontro ad un ameno fenomeno di ridondanza se si chiama la funzione più di una volta.
    in sostanza si riscrivono i replace ad ogni chiamata delle funzione...
    da quel poco che ricordo di visual basic, alle funzioni è possibile passare le variabili per riferimento o per valore.

    Presumo che di default siano passate per riferimento, per questo motivo la variabile viene processata e modificata ogni volta che chiami la funzione.

    Non so se funzioni allo stesso modo per ASP ma potresti definire l'argomento della funzione con la specifica ByVal per fare in modo che la variabile originale non venga modificata dalla funzione stessa.

    codice:
    Function accentate(ByVal str)
        str=replace(str,"a","[aà]")
        str=replace(str,"e","[eèé]")
        str=replace(str,"i","[iì]")
        str=replace(str,"o","[oò]")
        str=replace(str,"u","[uù]")
        accentate=str
    End Function
    
    val = "Has Fidanken"
    
    document.write(accentate(val)) ' H[aà]s F[iì]d[aà]nk[eèé]n
    document.write("<br>") '
    document.write(accentate(val)) ' H[aà]s F[iì]d[aà]nk[eèé]n

    Se togli il ByVal avrai la ridondanza.

    Certo, se nella query devi ripetere lo stesso valore restituito dalla stessa funzione, conviene comunque usare una variabile di supporto in cui appunto memorizzi il risultato della funzione che vai a richiamare una sola volta.

    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  6. #6
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,812
    ecco: così è perfetto!

    ora si può scegliere, tra i due metodi, quello più consono al contesto.

    andre'... famo squadra!

  7. #7
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    ecco: così è perfetto!


    andre'... famo squadra!
    la si può valutare
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.