J'ai une colonne datetime
ArrivalDateTime
qui est stockée en tant que valeur varchar
.
Disons que si la valeur est 20161212093256
, je veux que la sortie soit le 2016-12-12 09:32:56
.
Je pourrais get la partie de la date au format datetime comme ci-dessous.
SELECT CONVERT(DATETIME2(0), LEFT('20161212093256', 8))
Cela renvoie la sortie en tant que 2016-12-15 00:00:00
.
J'ai essayé la requête suivante pour get la partie time aussi.
SELECT CONVERT(DATE, LEFT('20161212093256', 8)) + ' ' + CONVERT(TIME, RIGHT('20161212093256', 6))
Mais cela génère une erreur:
Les types de données date et varchar sont incompatibles dans l'opérateur add
Comment puis-je get à la fois la date et l'heure au format datetime
?
Obtenez d'abord le composant date et convertissez-le en DATETIME
, puis récupérez le composant time et convertissez-le en DATETIME
également. Enfin, ajoutez les deux résultats:
SELECT CONVERT(DATETIME,LEFT('20161212093256', 8)) + CONVERT(DATETIME, LEFT(RIGHT('20161212093256', 6), 2) + ':' + SUBSTRING(RIGHT('20161212093256', 6), 3, 2) + ':' + RIGHT(RIGHT('20161212093256', 6), 2) )
Pour expliquer plus en détail, la première conversion de résultat est le composant de date:
2016-12-12 00:00:00.000
La deuxième conversion est le composant time, mais lorsque vous le convertissez en DATETIME
il l'ajoute à la date 0 ou '1900-01-01'
, le résultat est:
1900-01-01 09:32:56.000
Ensuite, vous ajoutez les deux DATETIME
s pour get:
2016-12-12 09:32:56.000
Pour se débarrasser du composant ms:
SELECT CONVERT(DATETIME,LEFT('20161212093256', 8)) + CONVERT(DATETIME, LEFT(RIGHT('20161212093256', 6), 2) + ':' + SUBSTRING(RIGHT('20161212093256', 6), 3, 2) + ':00' )
Essaye ça,
DECLARE @V_STR VARCHAR(20) = '20161212093256' SELECT CONVERT(SMALLDATETIME,LEFT(@V_STR,8) +' '+ --date SUBSTRING(@V_STR,9,2)+':'+ --hour SUBSTRING(@V_STR,11,2)+':'+ --minute SUBSTRING(@V_STR,13,2)) AS DATE_TIME --second
Essaye ça
select concat(CONVERT(DATE, LEFT('20161212093256', 8)) , ' ' , CONVERT(TIME, subssortingng(RIGHT('20161212093256', 6),1,2)+ ':' + subssortingng(RIGHT('20161212093256', 4),1,2) + ':' +RIGHT('20161212093256', 2)))
ci-dessus affichera l'heure avec des millisecondes, ci-dessous sans millisecondes
select concat(CONVERT(DATE, LEFT('20161212093256', 8)) , ' ' , subssortingng(RIGHT('20161212093256', 6),1,2)+ ':' + subssortingng(RIGHT('20161212093256', 4),1,2) + ':' +RIGHT('20161212093256', 2))
SELECT STUFF(STUFF(STUFF(STUFF(STUFF('20161212093256', 5, 0, '-'), 8, 0, '-'), 11, 0, ' '), 14, 0, ':'), 17, 0, ':')