![]() |
Datenbank: ADS • Version: 10.10 • Zugriff über: Delphi
SQL Datum
Moin,
ich baue mir aus einem Monat und einem Jahr ein Datum zusammen.
Code:
So funktioniert es.
SELECT CAST('01.'+IIF(Length(TRIM(CAST(7 as SQL_Char)))= 1, '0'+TRIM(CAST(7 as SQL_CHAR)), CAST(7 as SQL_Char))+'.'+CAST(2013 as SQL_Char) as SQL_Date) FROM System.iota
Problem ist jetzt aber, dass ich nicht mehr den ersten des Monats brauche sondern den letzten. Dazu habe ich mir eine Funktion geschrieben, die mir aus dem übergebenem Monat und Jahr den letzten Tag zurückliefert.
Code:
Die Funktion baue ich in mein SQL Statement ein und caste den Integer in eine Character.
CREATE FUNCTION ZMIF.GetLastDayOfMonth
( Year INTEGER, Month INTEGER ) RETURNS INTEGER BEGIN Return DAYOFMONTH(CONVERT(TIMESTAMPADD(SQL_TSI_DAY, -1, TIMESTAMPADD( SQL_TSI_MONTH, 1, CREATETIMESTAMP( Year, Month, 1, 0, 0, 0, 0 ))), SQL_DATE)); END;
Code:
Fehlermeldung ADS:
SELECT CAST(CAST(GetLastDayOfMonth(2013, 7) as SQL_Char)+'.'+IIF(Length(TRIM(CAST(7 as SQL_Char)))= 1, '0'+TRIM(CAST(7 as SQL_CHAR)), CAST(7 as SQL_Char))+'.'+CAST(2013 as SQL_Char) as SQL_Date) FROM System.iota
Zitat:
|
AW: SQL Datum
Das sollte mit serverseitigen Funktionen gehen.
TIMESTAMPDIFF, -ADD ![]() |
AW: SQL Datum
Hi jobo,
danke für deine Antwort. Das hab ich auch schonmal gefunden. Ich würde trotzdem gerne wissen, wie ich das auf meinen Weg lösen kann :-) Möchte ungern meinen ganzen SQL's umbauen. Gruß |
AW: SQL Datum
Also erstmal verwendest Du ein Client-Format für das Datum. Das ist nicht so gut. Da würde ich als erstes suchen, also nicht DD.MM.YYYY sondern YYYY-MM-DD.
Zweitens solltest Du JEDEN Cast von Integer nach Char mit TRIM einschließen. Und dann das ganze vielleicht noch lesbarer machen. Unabhängig davon dass es da bessere Methoden gibt, würde dies dann so funktionieren:
Code:
SELECT CAST(
TRIM(CAST(2013 as SQL_Char)) +'-'+ IIF(Length(TRIM(CAST(7 as SQL_Char)))= 1, '0'+TRIM(CAST(7 as SQL_CHAR)), -- IF TRIM(CAST(7 as SQL_Char))) -- ELSE +'-'+ TRIM(CAST(31 as SQL_Char)) AS SQL_DATE) FROM System.iota |
AW: SQL Datum
Super, das funktioniert.
Vielen dank. Wie könnte ich das ganze denn auch mit weniger Code lösen ( ![]() |
AW: SQL Datum
Verwende doch das bereits in der User defined funktion verwendete Skalar, z.b.:
Code:
Laut Deiner Infos setzt Du ja Advantage 10.1 ein, dort gibt es ja
select cast(CreateTimeStamp(2013, 07, 31, 0, 0, 0, 0) as SQL_DATE) from system.iota
![]() |
AW: SQL Datum
Ich werde doch alle SQL's umbauen, da erspar ich mir einiges an Code .
Besten Dank. Schönes Wochenende !!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz