web-dev-qa-db-fra.com

Convertir une chaîne au format 'YYYYMMDDHHMMSS' en datetime

Je reconnais qu'il y a déjà eu de nombreuses questions sur la conversion de chaînes en datetime mais je n'ai rien trouvé pour convertir une chaîne comme 20120225143620 qui inclut les secondes.

J'essayais d'effectuer une conversion propre sans sous-chaîner chaque segment et sans concaténer avec / et :.

Est-ce que quelqu'un a des suggestions?

13
sadmicrowave

Vous pouvez utiliser la méthode STUFF() pour insérer des caractères dans votre chaîne afin de la formater en une valeur que SQL Server pourra comprendre:

DECLARE @datestring NVARCHAR(20) = '20120225143620'

-- desired format: '20120225 14:36:20'
SET @datestring = STUFF(STUFF(STUFF(@datestring,13,0,':'),11,0,':'),9,0,' ')

SELECT CONVERT(DATETIME, @datestring) AS FormattedDate

Sortie:

FormattedDate
=======================
2012-02-25 14:36:20.000

Cette approche fonctionnera si votre chaîne a toujours la même longueur et le même format, et elle fonctionne de la fin de la chaîne au début pour produire une valeur dans ce format: YYYYMMDD HH:MM:SS

Pour cela, vous n'avez pas besoin de séparer la partie date de toute façon, car SQL Server sera en mesure de le comprendre lorsqu'il est formaté.

Lecture connexe:

STUFF (Transact-SQL)

La fonction STUFF insère une chaîne dans une autre chaîne. Il supprime une longueur spécifiée de caractères dans la première chaîne à la position de départ, puis insère la deuxième chaîne dans la première chaîne à la position de départ.

STUFF (expression_caractère, début, longueur, replaceWith_expression)

21
Tanner