Questo sito utilizza cookie tecnici e di terze parti. Continuando la navigazione sul nostro sito accetti l'uso dei cookie. Per saperne di più leggi l'informativa sui cookie.   


Query SQL campo Varchar
Ultimo messaggio: 29 mar 2019 07:20 di Daniele. 2 Risposte.
Stampa gradevole
Solo gli utenti registrati possono rispondere ad una discussione.
Avatar
Daniele
Messaggi: 38
Iscritto dal: 11 nov 2013 08:48
Utente
Utente

28 mar 2019 16:30
Buonasera a tutti

ho un problema che non sono ancora riuscito a risolvere.

Devo fare una query per un report su una tabella SQL Server.

Devo filtrare il campo 'Badge', che è un Nvarchar(16).

Questo campo contiene sia dei numeri, che dei codifi fiscali.

Ora il cliente ha assegnato un range di Badge (valore numerico) da 2500 a 2600, per delle utenze di servizio, e mi chiede, tra i vari report, di estrapolare i record con i Badge di servizio.

Ho fatto una query, convertendo il campo Badge in INT, ma quando trova un codice fiscale esce l'errore di conversione.

Come posso risolvere ?

Grazie a tutti

 

Daniele G

    Avatar
    SirJo
    Messaggi: 2366
    Iscritto dal: 30 apr 2012 08:43
    Utente
    Utente

    29 mar 2019 06:07
    nella query potresti aggiungere un filtro in modo che estrae solo i record che hanno nel campo "Badge" un testo lungo 4 caratteri, visto che il codice fiscale è lungo 16 dovrebbe escluderlo.
    Questo sistema di sicuro funzionerà però ha un problema, che se un domani qualcuno ti inserisce nel campo ad esempio un valore "CIAO" il programma comunque andrà in errore.

    Io opterei invece per non convertire in INT il campo, estrarre comunque solo quelli con lunghezza uguale a 4, e poi farei un confronto tra stringhe. Adesso non sono sicuro che su TSQL si possa fare, ma penso che
    ..... where Badge >= '2500' and Badge <= '2600'
    potrebbe funzionare (su tanti altri linguaggi funziona)

    Sergio

      Avatar
      Daniele
      Messaggi: 38
      Iscritto dal: 11 nov 2013 08:48
      Utente
      Utente

      29 mar 2019 07:20

      Grazie Sergio,

      il tuo suggerimento mi ha portato a questa soluzione:

      SELECT Badge

      FROM Tabella

      WHERE (LEN(Badge) = 4) AND (CAST(Badge AS INT) >= 2500) AND (CAST(Badge AS INT) <= 2600)

      Il problema del valore del Badge "CIAO" non si pone, in quanto l'utente si identifica con dei Badge numerici, oppure con il codice fiscale della tessera sanitaria.

      Grazie

       Ciao

      Daniele G

        Solo gli utenti registrati possono rispondere ad una discussione.