inf1d3l
Goto Top

MS SQL: Varchar zu Datum im Select

Hallo,

ich habe eine Spalte in einer MS SQL Datebank, die den Typ Varchar hat und Datumsangaben im Format yyyymmddhhmmss enthält. Ich möchte schon beim Select ein Datum dd.mm.yyyyy daraus machen. Ein SQL-Pro hier, der das aus dem Kopf kann?

Merci

Content-Key: 2703222725

Url: https://administrator.de/contentid/2703222725

Printed on: May 10, 2024 at 15:05 o'clock

Member: em-pie
Solution em-pie May 06, 2022 at 08:16:06 (UTC)
Goto Top
Moin,

die Holzhammer-Methode wäre:
DECLARE @dt as nvarchar(24)
select @dt = '20220505101010'  

SELECT @dt
  , LEFT(@dt, 8)
  , RIGHT(@dt, 6)

  , TAG = CONCAT(RIGHT(LEFT(@dt, 8), 2), '.'  
      , RIGHT(LEFT(@dt, 6), 2), '.'  
      , LEFT(@dt, 4))
  , UHRZEIT = CONCAT(LEFT(RIGHT(@dt, 6), 2), ':'  
      , LEFT(RIGHT(@dt, 4), 2), ':'  
      , RIGHT(@dt, 2))

packe das in eine UDF und du hast es mit mehr comfort

Gruß
em-pie
Member: colinardo
Solution colinardo May 06, 2022 updated at 09:00:22 (UTC)
Goto Top
Und wenn die neue Spalte stattdessen ein echtes Datum als Typ haben soll,
SELECT Convert(DATE,left(spalte,8)) as Datum
FROM mytable;
davon lässt sich ja dann bei Bedarf leicht eine formatierte Variante(dd.mm.yyyy) ableiten
SELECT Convert(nvarchar,Convert(DATE,left(spalte,8)),104) as Datum
FROM mytable;

https://docs.microsoft.com/de-de/sql/t-sql/functions/date-and-time-data- ...
https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2005/m ...

Grüße Uwe
Member: ukulele-7
Solution ukulele-7 May 06, 2022 at 09:08:25 (UTC)
Goto Top
Für Datum + Zeit:
SELECT convert(DATETIME,stuff(stuff(stuff('20220505101010',9,0,' '),12,0,':'),15,0,':'))  
Member: Inf1d3l
Inf1d3l May 06, 2022 at 09:11:39 (UTC)
Goto Top
Ich habe nur Lesezugriff, habe ich vergessen zu erwähnen. Danke euch! Wie immer top!
Member: em-pie
em-pie May 06, 2022 updated at 09:43:21 (UTC)
Goto Top
Und für andere, die eine KOnvertierung häufiger, auch in anderen Selects benötigen, hier eine mögliche UDF

CREATE FUNCTION [dbo].[udf_ConvertDate] (
   @strDT as nvarchar(16)
)

RETURNS TABLE
as RETURN

SELECT
  [INPUT] = @strDT
  , [DATE] = Convert(DATE,left(@strDT,8))
  , [TIME] = CONVERT(TIME, (LEFT(RIGHT(@strDT, 6), 2) + ':'  
      + LEFT(RIGHT(@strDT, 4), 2) +  ':'  
      + RIGHT(@strDT, 2)))
  , [DATETIME] = CONVERT(DATETIME, CONCAT(left(@strDT,8), ' '   
      , (LEFT(RIGHT(@strDT, 6), 2), ':'  
      , LEFT(RIGHT(@strDT, 4), 2),  ':'  
      , RIGHT(@strDT, 2))))

Die Abfrage sähe dann so aus:

 select * from dbo.udf_ConvertDate('20220505101112')  
mit dem Ergebnis:
INPUT           DATE            TIME                    DATETIME
20220505101112	2022-05-05	10:11:12.0000000	2022-05-05 10:11:12.000



Und kann in der eigentlichen Abfrage so genutzt werden:
SELECT
 Col1
, Col2
, myTable.SpalteMitDatum
, DATUM = (select [DATE] from dbo.udf_ConvertDate(myTable.SpalteMitDatum))
FROM myTable