Conversione da char a numero

di Anonimizzato26388 il
14 risposte
Buongiorno, non sono pratica di sql server, ma ho dei dati su questo db.

Ho un problema perché ho due campi char che in realtà dentro hanno una data nel formato 01/01/2000. Ho bisogno di fare un'operazione su tali campi e cioè trovare la differenza di giorni tra le due date e poi moltiplicare tale differenza per una quantità.

Ripeto che parto da campi che sono char.

Come posso fare? Vi prego aiutatemi

Grazie

Paola

14 Risposte

  • Pessima scelta quello del tipo stringa... esiste il tipo Data appositamente...

    Il formato è mm/gg/aaaa oppure gg/mm/aaaa ?

    Devi fare questi calcoli in una query o in tuo programma che ha letto i dati?
  • Comunque, supponendo delle date italiane gg/mm/aaaa (formato 105) e risultato in una query, potresti scrivere

    500*DATEDIFF(DAY, CONVERT(DATE, '15/03/2020', 105), CONVERT(DATE, '20/03/2020', 105))

    dove 500 è il valore di esempio che vuoi moltiplicare e le due date quelle che vuoi sottrarre
  • Ti ringrazio tantissimo per le risposte intanto,
    il formato è gg/mm/aaaa e devo fare questi calcoli in una query che poi andrà in una stored procedure.

    Assolutamente d'accordo con il fatto che sia una pessima scelta…


    Grazie grazie

    Paola
  • Se posso approfittare, visto che devo fare una cosa urgente...poi prometto che studierò cast e convert…
    partendo da un char col - (-1,000) mi serve il numero -1 per fare dei calcoli...idee???
    il segno mi da problemi

    Grazie
  • Non ho capito ... hai un altro campo char in cui c'è

    "-1,000"

    oppure

    "(-1,000)"

    ?

    Ci sono le parentesi o no?

    Ma usate solo campi char? Sapete che esistono altri tipi di dati?
  • Purtroppo ci mandano i dati così...non possiamo farci nulla….
    ho il valore senza parentesi…..

    Grazie per la pazienza
  • Salve,
    nel caso di valori di tipo char(n) nel formato '(-1,0000)', io prima rimuoverei le parentesi, trasformerei il separatore decimale nel separatore standard ISO, effettuerei il trim totale del char risultante, convertirei in numerico e quindi, finalmente porterei il risultato nel dominio degli interi,
    DECLARE @value char(10) = '(-1,0000)';
    SELECT CAST( CAST( LTRIM( RTRIM( REPLACE( REPLACE( REPLACE( @value, '(', '' ), ')', '' ), ',', '.' ) ) ) AS numeric ) AS int ) AS [Value];
    --<---------
    Value
    -----------
    -1
    salutoni
    --
    Andrea
  • Mi sembra che abbia detto che le parentesi non ci siano, gli spazi prima e dopo non creano problemi e non è detto che il valore finale debba essere un intero. Quindi farei

    SELECT CAST( REPLACE('-1,000', ',', '.') AS DECIMAL(10,5)) AS Valore
  • Grazie @Oregon,
    mi era sfuggita l'ultima riga
    salutoni
    --
    Andrea
  • Ciao Andrea ...
  • Grazie davvero…..grazie a voi ho risolto!!!!
  • E ora studia
  • Ahahhahah….si ora studio!!!
Devi accedere o registrarti per scrivere nel forum
14 risposte