AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Datum

Ein Thema von Metallicwar · begonnen am 2. Aug 2013 · letzter Beitrag vom 2. Aug 2013
Antwort Antwort
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#1

SQL Datum

  Alt 2. Aug 2013, 09:15
Datenbank: ADS • Version: 10.10 • Zugriff über: Delphi
Moin,
ich baue mir aus einem Monat und einem Jahr ein Datum zusammen.

Code:
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
So funktioniert es.
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:
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;
Die Funktion baue ich in mein SQL Statement ein und caste den Integer in eine Character.
Code:
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
Fehlermeldung ADS:
Zitat:
Conversion error with scalar
CAST -- Location of error in the SQL statement is: 9 (line: 2 column: 8)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: SQL Datum

  Alt 2. Aug 2013, 09:41
Das sollte mit serverseitigen Funktionen gehen.
TIMESTAMPDIFF, -ADD

http://devzone.advantagedatabase.com..._functions.htm
Gruß, Jo
  Mit Zitat antworten Zitat
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#3

AW: SQL Datum

  Alt 2. Aug 2013, 09:57
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ß
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: SQL Datum

  Alt 2. Aug 2013, 11:09
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
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#5

AW: SQL Datum

  Alt 2. Aug 2013, 11:44
Super, das funktioniert.
Vielen dank.
Wie könnte ich das ganze denn auch mit weniger Code lösen (http://devzone.advantagedatabase.com..._functions.htm)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: SQL Datum

  Alt 2. Aug 2013, 12:04
Verwende doch das bereits in der User defined funktion verwendete Skalar, z.b.:
Code:
select cast(CreateTimeStamp(2013, 07, 31, 0, 0, 0, 0) as SQL_DATE) from system.iota
Laut Deiner Infos setzt Du ja Advantage 10.1 ein, dort gibt es ja diese Funktion bereits. Du hattest auf die Hilfe der Version 8 verlinkt.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#7

AW: SQL Datum

  Alt 2. Aug 2013, 12:35
Ich werde doch alle SQL's umbauen, da erspar ich mir einiges an Code .
Besten Dank.
Schönes Wochenende !!!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz