Visualizzazione dei risultati da 1 a 10 su 29

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Quote Originariamente inviata da stellinaxxx Visualizza il messaggio
    Devo insistere!!!
    codice: select*fromNomeTabellawherereplace(campo,'.', '') like'%valore%'
    In questo modo se in un campo ho memorizzato una sigla tipo U.S.L. e voglio dare modo all'utente pigro di cercarla mettendo nella textbox USL, con questa funzione la troverà lo stesso.
    E ripeto: FUNZIONA!!! Sul PC dove è installato Office 2010 FUNZIONA, mentre sull'altro no, dicendo che non riconosce la funzione REPLACE.
    Puoi insistere fin che vuoi.
    E' completamente sbagliata, e la tua spiegazione ne è la prova, senza ombra di dubbio.
    Comunque ritengo inutile continuare questa discussione.

  2. #2
    Quote Originariamente inviata da gibra Visualizza il messaggio
    Puoi insistere fin che vuoi.
    E' completamente sbagliata, e la tua spiegazione ne è la prova, senza ombra di dubbio.
    Comunque ritengo inutile continuare questa discussione.
    Come detto da oregon, temo ci sia un misunderstanding... non ho riferimenti sul dialetto SQL di Access, ma una funzione del genere esiste ad esempio in SQLite, e quel codice sarebbe assolutamente corretto. Per ogni record, il DBMS prende il contenuto del campo campo ed elimina tutti i punti prima di confrontarlo con la clausola like. Ovvero, ovviamente non opera sul nome del campo, ma sul suo contenuto (come qualunque funzione che si possa richiamare in SQL).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Come detto da oregon, temo ci sia un misunderstanding... non ho riferimenti sul dialetto SQL di Access, ma una funzione del genere esiste ad esempio in SQLite, e quel codice sarebbe assolutamente corretto. Per ogni record, il DBMS prende il contenuto del campo campo ed elimina tutti i punti prima di confrontarlo con la clausola like. Ovvero, ovviamente non opera sul nome del campo, ma sul suo contenuto (come qualunque funzione che si possa richiamare in SQL).
    Appunto! MItaly, mi hai appena dato ragione!
    Infatti la regola è che:

    prende il contenuto del campo campo

    La questione NON E' se la funzione Replace() esista o meno; ci mancherebbe altro che dopo 15 anni di programmazione non la conoscessi!!!
    Il problema è che NON E' POSSIBILE usarla in quel modo, e francamente trovo davvero strano che nessuno se ne sia accorto.

    Stellinaxxx la usa facendo il Replace sul NOME del campo della tabella, NON sul contenuto del campo; il che non ha senso.
    Ammesso, e non concesso, che in Access puoi scrivere i nomi dei campi come ti pare basta che poi nelle query questi siano inclusi tra parentesi quadre, non ha comunque senso fare il Replace sul nome del campo, lo si deve fare sul contenuto.

    Questa non è un'opinione. E' un fatto.

    Tra l'altro, poi, è lo stesso stellinaxxx che afferma di volerla usare per tale scopo:
    Quote Originariamente inviata da stellinaxxx Visualizza il messaggio
    Devo insistere!!!
    codice: select*fromNomeTabellawherereplace(campo,'.', '') like'%valore%'
    In questo modo se in un campo ho memorizzato una sigla tipo U.S.L. e voglio dare modo all'utente pigro di cercarla mettendo nella textbox USL, con questa funzione la troverà lo stesso.
    solo che la stringa SQL riportata è sbagliata.

    Suggerirei di prestare più attenzione a quello che si legge, e si scrive.

  4. #4
    Quote Originariamente inviata da gibra Visualizza il messaggio
    Appunto! MItaly, mi hai appena dato ragione!
    Infatti la regola è che:

    prende il contenuto del campo campo
    È esattamente quello che vuole fare, come ribadito più volte; nel primo post ammetto che era poco chiaro e anch'io non avevo ben capito, ma poi si è chiarita perfettamente.
    Ammesso, e non concesso, che in Access puoi scrivere i nomi dei campi come ti pare basta che poi nelle query questi siano inclusi tra parentesi quadre, non ha comunque senso fare il Replace sul nome del campo, lo si deve fare sul contenuto.
    È ben quello che sta facendo! Infatti se specifichi il nome di un campo (che in Access, come in praticamente ogni altro DBMS, si può specificare senza quadre, se questo non introduce ambiguità) nella clausola WHERE, questo viene interpretato come il contenuto di quel campo sul record che è correntemente in esame; ma queste sono le basi di SQL, che so per certo che conosci a menadito, per cui non capisco da dove nasca l'equivoco (specie quando già in quattro ti abbiamo fatto notare che hai preso un abbaglio sull'uso che intende fare di quella query).
    Tra l'altro, poi, è lo stesso stellinaxxx che afferma di volerla usare per tale scopo:
    stellinaxxx vuole fare una specie di fuzzy-matching sul contenuto di una certa colonna; ovvero, nel DB in una certa colonna i nomi di diverse organizzazioni (sparo a caso) sono memorizzati con i punti tra le lettere delle sigle (ad esempio S.p.A., A.S.L., U.S.L.), e vuole che la ricerca matchi anche quando l'utente inserisce, come stringa da cercare, l'equivalente senza punti (SpA, ASL, USL). Per fare questo invece di fare un confronto del tipo
    codice:
    select * from NomeTabella where campo like '%valore%'
    (dove campo è una colonna di NomeTabella)
    vuole fare
    codice:
    select * from NomeTabella where replace(campo,'.', '') like '%valore%'
    ovvero, ad essere confrontato tramite la like non è il contenuto della colonna campo "così come è memorizzato nel DB", ma per ogni record il confronto avviene tra '%valore%' e il contenuto del campo campo "epurato" dai punti.
    Suggerirei di prestare più attenzione a quello che si legge, e si scrive.
    Non posso che essere d'accordo con questo suggerimento.

    In ogni caso, incidente chiuso, si torna in-topic, altrimenti non ne usciamo più.
    Ultima modifica di MItaly; 10-10-2013 a 20:24
    Amaro C++, il gusto pieno dell'undefined behavior.

Tag per questa discussione

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.