2016-10-13 9 views
2

Ich habe eine Daten, wo Datum und Uhrzeit im Format JJJJMMTT (20161012_1528) angezeigt wird.konvertieren Zeichenfolge in beide Datum und Uhrzeit

will ich es bis heute Zeit in SQL Server DB konvertieren, wie 2016.10.12 15: 28: 00: 00

gibt es eine gerade nach vorne Weg this.or zu tun zu haben, eine benutzerdefinierte Funktion erstellen ?

Antwort

7
Declare @String varchar(25) = '20161012_1528' 

Select cast(left(@String,8)+' '+Stuff(right(@String,4),3,0,':') as datetime) 

Oder

Select cast(Stuff(Replace(@String,'_',' '),12,0,':') as datetime) 

Returns

2016-10-12 15:28:00.000 
+0

Well john C – Sami

+0

Ehrfürchtig wie ein cham .. :) – user1046415

+0

@Sami Art Sehr arbeitete getan. Immer schön, von anderen Entwicklern zu hören –

0

Bitte versuchen Sie folgende Methode, Es erfordert ein paar Datetime und convertion Funktionen

declare @dt datetime 
declare @str varchar(40) = '20161012_1528' 

select @dt = 
    DATEADD(MI, CAST(right(@str,2) as int), 
     DATEADD(hh, cast(SUBSTRING(@str,10,2) as int), 
      CONVERT(datetime, left(@str,8)) 
     ) 
    ) 
select @dt 
0

Die c verwendet werden lostest konnte ich finden, war Datumformat 112, die nicht für die "_hhmm". Ich würde sehr empfehlen, nur die Konvertierung in Ihre T-SQL zu platzieren, da der Optimierer UDFs nicht sehr gut behandelt.

Der T-SQL wie folgt aussieht: DECLARE nvarchar (max) @datetimestring = '20161012_1528'

SELECT 
    dateadd(
     minute,convert(
      int,substring(
       @datetimestring,charindex(
        '_',@datetimestring 
       )+3,2 
      ) 
     ),dateadd(
      hour,convert(
       int,substring(
        @datetimestring,charindex(
         '_',@datetimestring 
        )+1,2 
       ) 
      ),convert(
       datetime, substring(
        @datetimestring,0,charindex(
         '_',@datetimestring 
        ) 
       ), 112 
      ) 
     ) 
    ) 

Die andere Option ist die Zeichenfolge zu dem erwarteten Datumsformat zu formatieren, die kürzer ist.

SELECT 
    convert(
     datetime,replace(
      stuff(
       stuff(
        stuff(
         @datetimestring,5,0,'-' 
        ),8,0,'-' 
       ),14,0,':' 
      ),'_',' ' 
     ) 
    ) 
Verwandte Themen