Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    38

    Problema uso Between con stringhe...

    Ciao a tutti,
    ho provato a informarmi prima scrivere qui ma non ho trovato risposta.
    Da una mia tabella vorrei selezionare un elenco di nomi la cui iniziale è compresa ad esempio tra A e B, la query che ho scritto è del tipo:

    select * from tab1 where nome between 'A' and 'B';
    ma il risultato è che ottengo solo i nomi che iniziano per A.
    Se metto between 'A' and 'C' ottengo i nomi che iniziano per A e per B non quelli che iniziano per C?
    Come mai ? sapete se sbaglio io? qualche idea?

  2. #2
    riusciamo a rispettare il regolamento e indicare il tipo di db?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    38
    Scusa non avevo idea....
    Il DB è mysql

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    E' giusto che i risultati siano quelli. Stai confrontando delle stringhe.

    Prova banalmente questo esempio

    select 'bianca' < 'b'

    che ti restituirà 0, quindi è ovvio che tutti i nomi che iniziano con la lettera b non vengano inclusi.

    Una delle tante alternative è questa

    select * from tab1 where nome regexp '^[a-b]'

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    38
    Ok grazie adesso provo,
    ma la clausola c between a and b
    non vuol dire c >= a AND c <= b ?
    quindi essendoci gli uguali dovrebbe prendermi anche gli estremi dell'intervallo...
    Se uso dei numeri C between 0 and 3,
    il 3 è compreso nei risultati....
    Cos'è appena uso le stringhe cambia la regola?

  6. #6
    è l'estremo maggiore che ti frega. between 'A' and 'C' non estrarrà mai 'CARLETTO' perché 'CARLETTO' è maggiore di 'C', molto semplice.

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Insomma, se proprio vuoi usare between, devi limitarti a confrontare la prima lettera del nome col tuo intervallo

    select * from tab1 where substring(nome,1,1) between 'a' and 'b'

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    38
    Ok grazie...
    era per aver chiaro come funziona.
    Cmq regexp va benissimo...userò quello.
    Grazie e scusate il disturbo

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    per la verità si può usare una collation specifica.
    ma la "vera" domanda è: a cosa diavolo serve, in generale, between?
    non l'ho ancora capito, e un "pochino" di db me ne intendo

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    38
    cosa intendi con collation specifica franzauker?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.