Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [SQL Server] date e conversione varchar > datetime

    Ciao a tutti,

    sono nuovo del codice SQL, sto picchiandomi con un problema di date in T-SQL e vorrei chiedere il vostro aiuto.
    Mi trovo con la mia tabella "MiaTabella".
    Ho le colonne:
    id - int - chiaveprimaria
    UnixTimestamp - varchar(255) - OkNULL
    DataOra - datatime - OkNULL

    - MiaTabella -
    id - UnixTimestamp - DataOra
    3834 - 1363561200 - 2013-03-24 00:00:00.000
    4030 - 1362697200 - NULL
    4155 - 1364425200 - NULL
    4209 - 1364166000 - NULL

    Il mio problema è questo: nella colonna "UnixTimestamp" ho molte righe, ognuna delle quali corrisponde a delle date in formato UNIX timestamp, ossia in secondi dalle 00:00 del 1/1/1970.
    Vorrei popolare la colonna accanto "DataOra" con il relativo valore datetime ma non riesco a farlo.
    Per ora ho intuito di poter usare la funzione DATEADD ma dovrei prima convertire i valori varchar in int e poi scrivere del codice che trasformasse il timestamp in datetime riga per riga.
    codice:
    DECLARE @timestamp int 
    SET @timestamp = '1364166000' 
    SELECT DATEADD(ss, @timestamp, '01-01-1970 00:00:00.000');
    
    risultato: 2013-03-24 23:00:00.000
    Mi dareste una mano a scrivere una stored procedure da far girare o inserire in un job che mi facesse il lavoro?
    Molte grazie a tutti, ciao

  2. #2
    hai provato con


    SELECT DATEADD(ss, UnixTimeStamp, '01-01-1970 00:00:00.000') FROM myTabella

    ???

  3. #3
    Originariamente inviato da optime
    hai provato con
    SELECT DATEADD(ss, UnixTimeStamp, '01-01-1970 00:00:00.000') FROM myTabella
    ???

    Ciao,

    si, nel frattempo ho fatto un po' di prove e mi pare di aver risolto quasi tutto.
    Non si poteva fare subito un DATEADD perché il valore originario era un varchar.
    Quindi ho inserito una colonna in più secondi_int che contiene la conversione dei varchar in int.
    Il codice che ho messo insieme è:
    codice:
    USE MioDB 
    UPDATE MiaTabella 
    SET secondi_int = (SELECT CONVERT(int, UnixTimestamp)) 
    UPDATE MiaTabella 
    SET DataOra = (SELECT DATEADD(ss, secondi_int, '01-01-1970 00:00:00.000'))

  4. #4
    e non ti bastava fare la conversione al volo?

    SET DataOra = (SELECT DATEADD(ss, CONVERT(int, UnixTimestamp), '01-01-1970 00:00:00.000'))

    ???

  5. #5
    Originariamente inviato da optime
    e non ti bastava fare la conversione al volo?
    SET DataOra = (SELECT DATEADD(ss, CONVERT(int, UnixTimestamp), '01-01-1970 00:00:00.000'))
    ???
    Io non sarei stato capace di scrivere quella riga di codice, per questo chiedevo.
    Farò una prova con la tua

  6. #6
    Originariamente inviato da chiribbio
    Io non sarei stato capace di scrivere quella riga di codice, per questo chiedevo.
    credo invece di sì io ho semplicemente mixato le due tue, operando una sostituzione

    SET secondi_int = (SELECT CONVERT(int, UnixTimestamp))
    UPDATE MiaTabella
    SET DataOra = (SELECT DATEADD(ss, secondi_int, '01-01-1970 00:00:00.000'))

    comunque, facce sape'

  7. #7
    Originariamente inviato da optime
    comunque, facce sape'
    Ha funzionato, grazie al tuo spunto ho anche meno righe di codice.
    Ora proverò a giocare con i fusi.

    Ciao optime, grazie

  8. #8
    Originariamente inviato da chiribbio
    Ciao optime, grazie
    lasciami un mi piace, guarda in firma

  9. #9
    Originariamente inviato da optime
    lasciami un mi piace, guarda in firma
    non ho account feisbuc.. se me ne invento uno te lo clicco!

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.