Hier eine kleine Hilfe und Skript um einen Datumswert in einen Integerwert zu konvertieren.
SELECT (YEAR('2025-02-13') * 10000 + MONTH('2025-02-13') * 100 + DAY('2025-02-13')) AS date_as_integer;
Erklärung:
YEAR('2025-02-13')
: Extrahiert das Jahr aus dem Datum. Ergebnis:2025
.MONTH('2025-02-13')
: Extrahiert den Monat aus dem Datum. Ergebnis:2
.DAY('2025-02-13')
: Extrahiert den Tag aus dem Datum. Ergebnis:13
.YEAR * 10000
: Verschiebt das Jahr an die höchstwertigen Stellen. Ergebnis:20250000
.MONTH * 100
: Verschiebt den Monat an die mittleren Stellen. Ergebnis:200
.DAY
: Der Tag bleibt unverändert. Ergebnis:13
.- Addition der Teile:
```
20250000 (Jahr)
- 200 (Monat)
- 13 (Tag)
= 20250213 ```
Ergebnis:
Das Skript gibt den Integer-Wert 20250213
zurück, der das Datum 2025-02-13
im Format YYYYMMDD
repräsentiert.
Warum funktioniert das?
- Durch die Multiplikation von Jahr, Monat und Tag mit
10000
,100
und1
werden die Datumsteile so verschoben, dass sie eine zusammenhängende Zahl im FormatYYYYMMDD
ergeben. - Die Addition kombiniert diese Teile zu einer einzigen Zahl.
Beispiel:
Für das Datum 2025-02-13
:
Jahr = 2025 → 2025 * 10000 = 20250000
Monat = 2 → 2 * 100 = 200
Tag = 13 → 13 * 1 = 13
20250000 + 200 + 13 = 20250213
Das Endergebnis ist 20250213
.
Alternative:
Falls du eine kürzere und einfachere Methode bevorzugst, kannst du auch die REPLACE
-Funktion verwenden, um die Bindestriche zu entfernen und das Datum direkt in einen Integer umzuwandeln:
SELECT CAST(REPLACE('2025-02-13', '-', '') AS INT) AS date_as_integer;
Das Ergebnis ist ebenfalls 20250213
.
Fazit:
Mit dem Skript
SELECT (YEAR('2025-02-13') * 10000 + MONTH('2025-02-13') * 100 + DAY('2025-02-13')) AS date_as_integer;
erhältst du den gewünschten Wert 20250213
. 😊
Es können auch die Felder direkt benutzt werden
--- AdventureWorks2019
SELECT TOP 1
(YEAR([OrderDate]) * 10000 + MONTH([OrderDate]) * 100 + DAY([OrderDate])) AS date_as_integer
FROM [Sales].[SalesOrderHeader]
Ergibt beispielsweise den Wert 20110531
. 😊