Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL oder Delphi: Datumsbereich von Montag der Vorwoche bis Sonntag der Vorwoche (https://www.delphipraxis.net/187812-sql-oder-delphi-datumsbereich-von-montag-der-vorwoche-bis-sonntag-der-vorwoche.html)

juergen 6. Jan 2016 09:53

Datenbank: Pervasive • Version: 10.1 • Zugriff über: PDAC

SQL oder Delphi: Datumsbereich von Montag der Vorwoche bis Sonntag der Vorwoche
 
Hallo zusammen,

ich suche eine Möglichkeit den Datumsbereich vom Montag der Vorwoche bis zum darauffolgenden Sonntag der Vorwoche zu ermitteln, egal welchen Tag in der Woche ich das aufrufe. Das Datum liegt in einer Tabelle als String vor im Format JJJJMMTT.
Es kann SQL sein oder Delphi.

Ich habe zwar schon einiges ausprobiert, scheitere bei Pervasive aber an der Syntax. Ich erhalte immer ein "Expression evaluation Error".
Z.B. Ermittlung des letzten Sonntages:
Code:
SELECT DATEADD(DAY, DATEDIFF(DAY, '19000107', CurDate()) / 7 * 7, '19000107')
Vielen Dank schon mal vorab für eure Hilfe!

himitsu 6. Jan 2016 10:18

AW: SQL oder Delphi: Datumsbereich von Montag der Vorwoche bis Sonntag der Vorwoche
 
Also erstmal mußt du den String in ein DATE umwandeln.
www.forumtopics.com/busobj/viewtopic.php?t=63554

Und dann einfach entweder zuerst "minus 7" oder am Ende, um in die letzte Woche zu kommen.
Von dem Datum kannst du dir dann den Wochentag geben lassen, als Zahl, und mit dessen Wert dann den Wochenanfang und das Ende ausrechnen.
z.B.: http://www.postgresql.org/message-id...21571@wolff.to
eventuell
SQL-Code:
date_part('DOW', ...)
oder
SQL-Code:
extract(dow from ...)


Vielleicht hat du Glück und es gibt in Pervasive auch schon was Fertiges, so ala
Delphi-Referenz durchsuchenStartOfTheWeek Delphi-Referenz durchsuchenEndOfTheWeek

Hier was zum Angucken:
Delphi-Quellcode:
function StartOfTheWeek(const AValue: TDateTime): TDateTime;
begin
  Result := DateOf(AValue) - (DayOfTheWeek(AValue) - 1);
end;

X := StartOfTheWeek(StrToDate(...));

noisy_master 6. Jan 2016 10:30

AW: SQL oder Delphi: Datumsbereich von Montag der Vorwoche bis Sonntag der Vorwoche
 
Da war Himitsu doch etwas schneller....

so sollte es gehen:

Delphi-Quellcode:
var LastSunday, LastMonday : TDateTime;
    day : integer;
begin   
  day := DayOfTheWeek(now());
  LastSunday := IncDay(now(), -day);
  LastMonday := IncDay(LastSunday ,-6);
end;

himitsu 6. Jan 2016 10:34

AW: SQL oder Delphi: Datumsbereich von Montag der Vorwoche bis Sonntag der Vorwoche
 
Zitat:

Zitat von noisy_master (Beitrag 1326126)
so sollte es gehen:

Nur halt in SQL und nicht Pascal. :zwinker:

Aber man kann diese Funktion bestimmt in eine DLL schieben, sie im DB-Server laden und dann verwenden. :angle:

jobo 6. Jan 2016 11:08

AW: SQL oder Delphi: Datumsbereich von Montag der Vorwoche bis Sonntag der Vorwoche
 
Zitat:

Zitat von juergen (Beitrag 1326121)
Z.B. Ermittlung des letzten Sonntages:

hab keine Ahnung von Pervasive, aber sowas sollte gehen:
Code:
select dayofweek(convert('2005-02-05',sql_date))
--# oder
select dayofweek(curdate())
Zitat:

Sunday is day 1, .. to Saturday = day 7.
Problem könnten die Language Settings der DB oder letztlich der Clientconnection sein, sprich in welcher Textnotation erwartet die DB ein Datum. GgF. gibt's da wie bei anderen DB auch die Möglichkeit, eine Formatmaske explizit mitzugeben.
Wenn Du den Wochentag hast, kannst Du den glaub ich auch bei Pervasive einfach verrechnen. Also curdate() - DOW+1 für letzten Montag oder so

juergen 6. Jan 2016 11:17

AW: SQL oder Delphi: Datumsbereich von Montag der Vorwoche bis Sonntag der Vorwoche
 
Hallo,

ich habe nicht kreativ genug nachgedacht.:oops:
Ich wollte immer *zuerst* den Montag der Vorwoche ermitteln und dann den Sonntag (Denkweise VON Datum BIS Datum).
Euer Schubs in die richtige Richtung hat mir weitergeholfen. Ich ermittle erst den letzten Sonntag und ziehe dann 6 Tage ab und lande somit auf den Montag der Vorwoche.

Vielen Dank für Eure Unterstützung! :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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