Code & Queries

Code & Queries: Your Source for SQL, Python, and AI Insights

Umwandlung Datumswert zu einem Integer Wert

- Veröffentlicht unter Community & Best Practices von

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:

  1. YEAR('2025-02-13'): Extrahiert das Jahr aus dem Datum. Ergebnis: 2025.
  2. MONTH('2025-02-13'): Extrahiert den Monat aus dem Datum. Ergebnis: 2.
  3. DAY('2025-02-13'): Extrahiert den Tag aus dem Datum. Ergebnis: 13.
  4. YEAR * 10000: Verschiebt das Jahr an die höchstwertigen Stellen. Ergebnis: 20250000.
  5. MONTH * 100: Verschiebt den Monat an die mittleren Stellen. Ergebnis: 200.
  6. DAY: Der Tag bleibt unverändert. Ergebnis: 13.
  7. 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 und 1 werden die Datumsteile so verschoben, dass sie eine zusammenhängende Zahl im Format YYYYMMDD 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. 😊