105 votes

Comment convertir la colonne d'horodatage du serveur SQL en format de temps.

Comme le serveur SQL renvoie l'horodatage comme 'Nov 14 2011 03:12:12:947PM' existe-t-il un moyen simple de convertir une chaîne de caractères en un format de date tel que 'Y-m-d H:i:s'.

Jusqu'à présent, j'ai utilisé

date('Y-m-d H:i:s',strtotime('Nov 14 2011 03:12:12:947PM'))

2voto

jrobiii Points 71

"Vous continuez à utiliser ce mot. Je ne pense pas qu'il signifie ce que vous pensez qu'il signifie." - Inigo Montoya

L'horodatage n'a absolument aucun rapport avec le temps comme l'a dit marc_s à l'origine.

declare @Test table (
     TestId int identity(1,1) primary key clustered
    ,Ts     timestamp
    ,CurrentDt datetime default getdate()
    ,Something varchar(max)
)

insert into @Test (Something)
    select name from sys.tables
waitfor delay '00:00:10'

insert into @Test (Something)
    select name from sys.tables

select * from @Test

Remarquez dans la sortie que Ts (hex) s'incrémente de un pour chaque enregistrement, mais que le temps réel présente un écart de 10 secondes. Si c'était lié au temps, il y aurait un écart dans l'horodatage pour correspondre à la différence de temps.

1voto

Andrew Peterson Points 11

Robert Mauro a le bon commentaire. Pour ceux qui connaissent les origines de Sybase, datetime était en fait deux entiers séparés, un pour la date, un pour l'heure, de sorte que timestamp aka rowversion pouvait simplement être considéré comme la valeur brute capturée à partir du serveur. Beaucoup plus rapide.

0voto

user1575120 Points 51

Après l'impeachment de la conversion en entier CONVERT(BIGINT, [timestamp]) as Timestamp J'ai obtenu le résultat suivant

446701117 446701118 446701119 446701120 446701121 446701122 446701123 446701124 446701125 446701126

Oui, ce n'est pas une date et une heure, ce sont des numéros de série.

0voto

Baidiuk Yevhen Points 1

Pour moi, ça marche : TO_DATE('19700101', 'yyyymmdd') + (TIME / 24 / 60 / 60) (oracle DB)

-1voto

cecchy Points 1

J'avais le même problème avec l'horodatage, par exemple : '29-JUL-20 04.46.42.000000000 PM'. Je voulais le transformer en format 'yyyy-MM-dd'. La solution qui a finalement fonctionné pour moi est la suivante

SELECT TO_CHAR(mytimestamp, 'YYYY-MM-DD') FROM mytable ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X