2015-02-23 29 views
5

Rozumiem, że było już wiele pytań o konwersję ciągów znaków na datetime, ale nie znalazłem nic do przekonwertowania ciągu znaków, takiego jak 20120225143620, który zawiera sekundy.Konwertuj ciąg znaków z rozszerzeniem YYYYMMDDHHMMSS na datetime

Próbowałem przeprowadzić czystą konwersję bez podciągania każdego segmentu i łączenia się z / i :.

Czy ktoś ma jakieś sugestie?

Odpowiedz

7

Można użyć metody STUFF() wstawić znaki w Twojej ciąg sformatować go na wartość SQL Server będzie w stanie zrozumieć:

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 

wyjściowa:

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

ten podejście zadziała, jeśli twój ciąg ma zawsze tę samą długość i format, i działa od końca łańcucha do początku, aby wytworzyć wartość w tym formacie: YYYYMMDD HH:MM:SS

W tym przypadku nie ma potrzeby oddzielania części daty, ponieważ SQL Server będzie mógł ją zrozumieć w jej formacie.

pokrewne Reading:

STUFF (Transact-SQL)

Funkcja STUFF wstawia ciąg do innego napisu. Usuwa określoną długość znaków w pierwszym ciągu w pozycji początkowej, a następnie wstawia drugi ciąg do pierwszego ciągu w pozycji początkowej.

rzeczy (character_expression rozpocząć, długość replaceWith_expression)