Qry: Estrarre valore presente tra due stringhe

di il
5 risposte

Qry: Estrarre valore presente tra due stringhe

Ciao a tutti!
Scusate vi chiedo un aiuto,
in una query vorrei estrarre una stringa che è compresa tra due caratteri, ad esempio:

stringa: P.ED.323/1

il valore che mi interessa estrarre è 323
quindi il valore che sta , leggendo la stringa da dx, dopo il punto e prima di /

come posso fare per ottenere questo ?

Grazie mille!

5 Risposte

  • Re: Qry: Estrarre valore presente tra due stringhe

    elisa2014 ha scritto:


    in una query vorrei estrarre una stringa che è compresa tra due caratteri, ad esempio:

    stringa: P.ED.323/1

    il valore che mi interessa estrarre è 323
    quindi il valore che sta , leggendo la stringa da dx, dopo il punto e prima di /
    Mid$([campostringa], InStrRev([campostringa], ".") + 1, 
    (InStrRev([campostringa], "/") - InStrRev([campostringa], ".")) - 1)
    Ho usato Mid$ invece di Mid perché dici che vuoi estrarre "una stringa" e non un numero, quindi fin da subito considero tale il risultato.
    Per capire come è stato costruito cerca il funzionamento di Mid (e Mid$) e InStrRev nella guida in linea.

    Qui spiego un po':
    Secondo parametro di Mid$
    [InStrRev([campostringa], ".") + 1] = trova la posizione del carattere "punto", partendo dalla fine e aggiunge +1 (così parte con Mid$ dal carattere successivo, che nell'esempio è il primo 3 di 323)
    Terzo parametro di Mid$
    [(InStrRev([campostringa], "/") - InStrRev([campostringa], ".")) - 1)] = deve indicare quanti caratteri considerare, che calcola per differenza tra la posizione di ["/"] e ["."], togliendo poi 1, altrimenti prende anche il "/". Nell'esempio ((9 - 5) - 1)

    (scritto in pura teoria, non l'ho provato, quindi potrebbe esserci qualcosa da aggiustare, ma la via è questa)
    In generale, per operazioni di questo tipo: Left, Right, Mid, (con la relativa variante con $ finale), InStr e InStrRev. Combinate insieme nel modo giusto fai tutto.

    Edit delle 16.44 = rileggendo tutto dopo un po' di tempo ho visto che avevo commesso un errore:
    [... togliendo poi 1, altrimenti prende anche il "." ...]
    In realtà se non si toglie 1 prende anche "/" (l'ultimo carattere dell'intervallo, non il primo)

    Aggiungo una precisazione
    scrivendo:
    "[InStrRev([campostringa], ".") + 1] = trova la posizione del carattere "punto", partendo dalla fine e aggiunge +1"
    si può credere che InStrRev restituisca la posizione (numerica) di un carattere rispetto alla fine della stringa. InStrRev invece restituisce sempre la posizione all'interno della stringa riferita all'inizio (da sinistra), solo che inizia la ricerca dalla fine (ecco perché c'è Rev dopo InStr: un InStr rovesciato, che parte dalla fine).
    Fine Edit delle 16.44
  • Re: Qry: Estrarre valore presente tra due stringhe

    Caspita grazie mille,
    io cercavo di fare un mid, non mid$ , ecco perché non mi risultava.
    nella qry mi dà errore di sintassi, ho sostituito la "," con il ";"
    controllo meglio le parentesi, se risolvo la posto qui sul forum con la sintassi corretta
  • Re: Qry: Estrarre valore presente tra due stringhe

    No, scusami non mi dà errore di sintassi, non riconosce la funzione Mid$, che tu sappia
    è valida solo in VB ? Non si può utilizzare in una query ?
  • Re: Qry: Estrarre valore presente tra due stringhe

    elisa2014 ha scritto:


    Caspita grazie mille,
    io cercavo di fare un mid, non mid$ , ecco perché non mi risultava.
    nella qry mi dà errore di sintassi, ho sostituito la "," con il ";"
    controllo meglio le parentesi, se risolvo la posto qui sul forum con la sintassi corretta
    Il Problema non è tra [Mid] e [Mid$] perchè se le guardi e leggi la guida funzionano UGUALE, cambia solo il DataType restituito..., quando la differenza tra il separatore [;] o [,] a seconda che sia scritto in VBA o in GENERATORE.
  • Re: Qry: Estrarre valore presente tra due stringhe

    elisa2014 ha scritto:


    no, scusami non mi dà errore di sintassi, non riconosce la funzione Mid$, che tu sappia
    è valida solo in VB ? Non si può utilizzare in una query ?
    L'uso di "," invece di ";" è un classico per me, che scrivo poco in QBE e digito molto in SQL e VBA.
    No, Mid$ è valido anche nelle query.
    Prova a crearlo ex novo con il Generatore Espressioni, la procedura guidata per creare i campi calcolati.
    In ogni caso Mid otterebbe lo stesso risultato, ti darebbe solo la possibilità di considerare fin da subito un numero come tale (se quello è il risultato).

    Escludendo un errore di sintassi (parentesi, virgole, puntievirgola, nomi campi) se il messaggio riguarda il mancato riconoscimento della funzione Mid o Mid$, una delle cause principali è da ricercare nei Riferimenti di VBA dove se anche uno solo è indicato come mancante (anche se non utilizzato o totalmente estraneo all'operazione in corso) crea problemi a tutto. Quindi verificare i Riferimenti e sistemarli, se necessario.

    Eccesso di scrupolo = questa operazione di "estrazione di valore" tra due stringhe serve per popolare un campo apposito (ad esempio con una query di aggiornamento) o è limitato ad un campo calcolato presente solo nella query? Scritto in un altro modo: se si tratta di una query di aggiornamento / accodamento o creazione tabella, il campo che deve ospitare il risultato di questa estrazione è adatto a contenere i valori che si ottengono?
Devi accedere o registrarti per scrivere nel forum
5 risposte