Datum auswählen

ilmstruppi

Neuer Benutzer
Beiträge
3
Hallo,

ich möchte eine Abfrage machen in der das heutige und das gestrige Datum eingebunden wird.
Wie setze ich das um? Die Abfrage muss aber dynamisch sein, ich kann also nicht datum= '01.08.2013' sagen.

Ich habe es bis jezt so probiert:
where DATUM between DATEADD(day, ISNULL(BEKSTAT.DATUM,0) -'1' and GETDATE()
Hinweiß:
Das Datum in der Datenbank ist als 4 stellige Zahl hinterlegt (zB.: 3428)


Ich hoffe ihr könnt mir helfen.
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.028
Hallo,

ich möchte eine Abfrage machen in der das heutige und das gestrige Datum eingebunden wird.

Hinweiß:
Das Datum in der Datenbank ist als 4 stellige Zahl hinterlegt (zB.: 3428)


Ich hoffe ihr könnt mir helfen.

Ich glaube, in diesem Falle kann man Dir nicht helfen. Wie soll man denn aus einem Datum auf diese Zahl kommen? Warum verwendest Du nicht passende Datentypen?
 

ilmstruppi

Neuer Benutzer
Beiträge
3
Weil ich das Datum so vorgegeben bekomme, und dieses laut meinem Kollegen so verarbeitet werden kann:

DATEADD(day, ISNULL(p.aufdat,0), convert(date,'01.01.1996',104)) end,112),'')

Nun ist die Frage wie ich das sinngemäß einbauen kann.
 

akretschmer

Datenbank-Guru
Beiträge
9.028
Weil ich das Datum so vorgegeben bekomme, und dieses laut meinem Kollegen so verarbeitet werden kann:

DATEADD(day, ISNULL(p.aufdat,0), convert(date,'01.01.1996',104)) end,112),'')

Nun ist die Frage wie ich das sinngemäß einbauen kann.

Dann laß Dir von Deinem Kollegen eine Formel geben, wie man das heutige und das gestrige Datum berechnet, und nutze diese Formeln in Deiner WHERE-Condition.
Mit 'richtigen' Datentypen wäre es trivial: where date_column between current_date-1 and current_date (in PG, in M$SQL ganz sicher ähnlich einfach)
 

akretschmer

Datenbank-Guru
Beiträge
9.028
Das ist die Umrechnung. Tag null ist der 1.1.1996.

Nun ja, weil Du es bist:

Code:
test=# create or replace function ilmstruppi (date) returns int as $$select ((extract(epoch from current_date::timestamp) -  extract(epoch from '1996-01-01'::timestamp)) / (3600*24))::int;$$ language sql;
CREATE FUNCTION
test=*# select * from ilmstruppi(current_date);
 ilmstruppi
------------
       6422
(1 row)

test=*# create table foo as select * from generate_series(6418,6425) datum;
SELECT 8
test=*# select * from foo;
 datum
-------
  6418
  6419
  6420
  6421
  6422
  6423
  6424
  6425
(8 rows)

test=*# select * from foo where datum between ilmstruppi(current_date-1) and ilmstruppi(current_date);
 datum
-------
  6422
(1 row)

*smile*

Mal echt: warum speichert man ein Datum so krude?

Andreas
 

ukulele

Datenbank-Guru
Beiträge
4.394
Also dein Code
Code:
DATEADD(day, ISNULL(p.aufda,0), convert(date,'01.01.1996',104)) end,112),'')
läuft bei mir unter MSSQL schonmal nicht. Das END ist vermutlich Teil von irgendetwas Anderem und die Syntax stimmt somit am Ende nicht. Ausserdem bekomme ich mit CONVERT(DATE,[...]) die Meldung das er INT nicht in DATE konvertieren kann / will, warum habe ich jetzt nicht weiter verfolgt. Hier mal etwas Testcode wie es laufen müsste:
Code:
DECLARE    @Datum INT
SET        @Datum = 6426
SELECT    convert(DATE,convert(DATETIME,(isnull(@Datum,0) + 35063),104),104)
SELECT    convert(DATE,getdate(),104)
SELECT    convert(DATE,getdate()-1,104)
 
SELECT    *
FROM    tabelle
WHERE    convert(DATE,convert(DATETIME,(isnull(Datum,0) + 35063),104),104)
BETWEEN    convert(DATE,getdate()-1,104)
AND        convert(DATE,getdate(),104)
 

funkyice

Benutzer
Beiträge
21
Hallo,

ich hoffe ich habe es richtig verstanden, um an das heutige Datum (ohne Uhrzeit) zu gelangen funktioniert bei mir:
Code:
(CONVERT(Datetime,CONVERT(VARCHAR,GETDATE(),112)))

Für das Datum von "gestern":
Code:
(CONVERT(Datetime,CONVERT(VARCHAR,GETDATE()-1,112))))

Kannst es ja mal in eine leere SELECT einfügen, dann siehst Du, ob Dir die korrekten Daten ausgegeben werden.
 

Benutzer0000

Benutzer
Beiträge
13
Du kannst dir diese Seite ansehen. Hier findest du bestimmt das was du suchst.
BTW: GetDate() Gibt schon einen DateTime wert zurück, somit musst du diesen nicht mehr umwandeln ... Möchtest du die Uhrzeit rausgefiltert bekommen, so musst du dies in "Date" umwandeln. Date ist ein Datumstyp, der keine Zeit speichert.

MFG
 
Werbung:

Benutzer0000

Benutzer
Beiträge
13
dann würde ich sagen bzw. man kann es auch nach nem anderen bestimmten format ändern:
Code:
Convert(varchar, GETDATE(), 104)
 
Oben