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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2703222725
Url: https://administrator.de/contentid/2703222725
Ausgedruckt am: 05.11.2024 um 23:11 Uhr
5 Kommentare
Neuester Kommentar
Moin,
die Holzhammer-Methode wäre:
packe das in eine UDF und du hast es mit mehr comfort
Gruß
em-pie
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
Und wenn die neue Spalte stattdessen ein echtes Datum als Typ haben soll,
davon lässt sich ja dann bei Bedarf leicht eine formatierte Variante(dd.mm.yyyy) ableiten
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
SELECT Convert(DATE,left(spalte,8)) as Datum
FROM mytable;
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
Und für andere, die eine KOnvertierung häufiger, auch in anderen Selects benötigen, hier eine mögliche UDF
Die Abfrage sähe dann so aus:
mit dem Ergebnis:
Und kann in der eigentlichen Abfrage so genutzt werden:
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')
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