DATUMS FELDER

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

gei3r
*
Beiträge: 12
Registriert: Mi, 18.04.2007 14:41

DATUMS FELDER

Beitrag von gei3r »

Hallo Zusammen,
ich versuche eine ganz einfach Abfrage in BASE.

Es gibt eine Tabelle mit 3 Feldern:

ID = automatisches hochzählen [integer]
WE = Wareneingangsdatum [date]
1Stich = 1. Stichprobe [date]

nun möchte ich über eine Abfrage feststellen wie lange es vom Wareneingang bis zur ersten Stichprobe in Tagen gedauert hat.

in calc habe ich einfach 1Stich - WE eingetragen und es hat funktioniert :)

in base bekomme ich immer eine java fehlermeldung:

SQL-Status: 37000
Fehler-Code: -16

Wrong data type: java.lang.NumberFormatException in statement [SELECT "1Stich" - "WE" FROM "Tabelle1"]

Was mache ich falsch???

Bitte um schnelle Antwort und Gruß

gei3r
berndkli
*****
Beiträge: 289
Registriert: Di, 12.04.2005 22:05

Beitrag von berndkli »

Hallo

Um Zeitdifferenzen in Base auszurechnen braucht man die Funktion DATEDIFF()
Schreibe in der Abfrage in eine neue Spalte in die Zeile "Feld"

Code: Alles auswählen

DATEDIFF('dd',"WE","1Stich")
Mehr zu eingebauten Funktionen unter

http://hsqldb.org/web/hsqlDocsFrame.html

in Kapitel 9 unter "Built-in Functions and Stored Procedures"

Hoffentlich war das schnell genug....

Gruss Bernd
gei3r
*
Beiträge: 12
Registriert: Mi, 18.04.2007 14:41

Beitrag von gei3r »

SUPER VIELEN DANK!

genau das habe ich gesucht, funktioniert!

nun hab ich aber noch eine frage...

wenn ich als ergebnis eine 0 bekomme möchte ich das es automatisch zu einer 1 wird :)
berndkli
*****
Beiträge: 289
Registriert: Di, 12.04.2005 22:05

Beitrag von berndkli »

Hallo

Schalte zur allgemeinen Übersicht die Designansicht aus und kopiere das hinein

Code: Alles auswählen

SELECT "WE, "1Stich", CASEWHEN( Datediff( 'dd', "WE", "1Stich" ) = 0, 1, Datediff( 'dd', "WE", "1Stich" ) ) FROM "Tabellenname"
Gruss Bernd
Zuletzt geändert von berndkli am Mi, 18.04.2007 16:54, insgesamt 1-mal geändert.
berndkli
*****
Beiträge: 289
Registriert: Di, 12.04.2005 22:05

Beitrag von berndkli »

Nachtrag

Die Datediff Spalte wird durch den langen Ausdruck recht breit.
Mit einem "AS" kann man das ändern

Code: Alles auswählen

SELECT "WE, "1Stich", CASEWHEN( Datediff( 'dd', "WE", "1Stich" ) = 0, 1, Datediff( 'dd', "WE", "1Stich" ) ) AS "Differenz" FROM "Tabellenname"
Gruss Bernd
Zuletzt geändert von berndkli am Mi, 18.04.2007 16:54, insgesamt 1-mal geändert.
gei3r
*
Beiträge: 12
Registriert: Mi, 18.04.2007 14:41

Beitrag von gei3r »

Column not found: Zeit1 in statement [SELECT "1Stich", "WE", CASEWHEN( Datediff( 'dd', "1Stich", "WE" ) = 0, 1, Datediff( 'dd', "Zeit1", "Zeit2" ) ) AS "Differenz" FROM "Tabelle1"]

sorry mein fehler ;=)

SELECT "1Stich", "WE", CASEWHEN( Datediff( 'dd', "1Stich", "WE" ) = 0, 1, Datediff( 'dd', "1Stich", "WE" ) ) AS "Differenz" FROM "Tabelle1"

so funktioniert es!

und wieder einmal... vielen vielen DANK!
berndkli
*****
Beiträge: 289
Registriert: Di, 12.04.2005 22:05

Beitrag von berndkli »

War ich irgendwie zu schusselig - hab's jetzt aber korrigiert damit erst keine Werwirrtümer aufkommen.

Gruss Bernd
gei3r
*
Beiträge: 12
Registriert: Mi, 18.04.2007 14:41

Beitrag von gei3r »

und wieder mal ich....

nun habe ich es mit Währungsfeldern zu tun ;)

die Abfragen funktionieren soweit nur kommt als Ergebnis ein gerundeter Wert. Wie muss ich eine Abfrage stellen in der als Ergebnis auch z.b:

"EK_Preis" - "Rabatt" = Wert in Euro bekomme?
berndkli
*****
Beiträge: 289
Registriert: Di, 12.04.2005 22:05

Beitrag von berndkli »

Hallo gei3r

Bei neuen Themen ist es eigentlich besser einen neuen Thread aufzumachen.

Wenn du mit Kommazahlen rechnen willst brauchst du in der Tabelle als Spaltendefinition "Decimal" oder "Numeric"; du hast wahrscheinlich Integer, da gehen nur Ganzzahlen.
Evtl. kannst du auch mal in den Tabellenkopf der Abfrage rechtsklicken und schauen wie die entsprechenden Spalten formatiert sind.

Gruss Bernd
gei3r
*
Beiträge: 12
Registriert: Mi, 18.04.2007 14:41

Beitrag von gei3r »

ja ich weiß... wollte nur nicht das ganze forum mit meinen anfänger fragen nerven...

ich hatte die werte als decimal und dann im menü auf währung gestellt.
die ausgabe ist nun auch auf währung gestellt, leider wird mein ergebnis noch gerundet :(

eine ander idee?

ps. berndkli du bist der beste :)

vielen dank & gruß

gei3r

*edit*

hat sich erledigt, hab es nun als numeric mit 2 nachkomma stellen!

trotzdem vielen dank & super forum :)
gei3r
*
Beiträge: 12
Registriert: Mi, 18.04.2007 14:41

Beitrag von gei3r »

Guten Morgen,
und mal wieder die Datumsfelder...
Jetzt habe ich folgendes Problem:

6 Tabellen Einträge:

1. ID
2. 1Stich
3. 1OK
4. 2Stich
5. 2OK
6. AA (Auftrag abgeschlossen)

Ich möchte die Zeit ermitteln vom OK der Stichproben bis zum Auftragsabschluß. Hierbei zählt immer nur das Ergebnis der letzten Stichprobe.

Problem ist es werden nicht immer 2 Stichproben durchgeführt, ich weiß nicht wie ich die Abfrage stellen soll :(

Bitte um Hilfe :)
berndkli
*****
Beiträge: 289
Registriert: Di, 12.04.2005 22:05

Beitrag von berndkli »

Hi
Du brauchst also entweder die Differenz 2OK AA oder (falls 2OK nicht vorhanden) 1OK AA
Es müsste gehn mit

Code: Alles auswählen

SELECT "deine Spalten", IFNULL(DATEDIFF('dd',"2OK","AA"),DATEDIFF('dd',"1OK","AA")) AS "wie du willst" FROM "Tabellenname"
Gruss Bernd
gei3r
*
Beiträge: 12
Registriert: Mi, 18.04.2007 14:41

Beitrag von gei3r »

war ja nicht anders zu erwarten...

ES FUNKTIONIERT!

*tasse_kaffe_rüberschieb*

vielen Dank :)

Gruß gei3r
gei3r
*
Beiträge: 12
Registriert: Mi, 18.04.2007 14:41

Beitrag von gei3r »

berndkli hat geschrieben:Hi
Du brauchst also entweder die Differenz 2OK AA oder (falls 2OK nicht vorhanden) 1OK AA
Es müsste gehn mit

Code: Alles auswählen

SELECT "deine Spalten", IFNULL(DATEDIFF('dd',"2OK","AA"),DATEDIFF('dd',"1OK","AA")) AS "wie du willst" FROM "Tabellenname"
Gruss Bernd
jetzt hab ich noch eine frage.
wie kann ich in der abfrage festhalten das nun wieder eine 1 anstatt einer 0 bei dem Ergebnis herraus kommt?

ich habe versucht den code schnipsel vom oberen post einzubauen, aber irgendwie bekomme ich immer syntaxfehler :(

vielen dank & gruss gei3r
berndkli
*****
Beiträge: 289
Registriert: Di, 12.04.2005 22:05

Beitrag von berndkli »

Hallo

Probier das mal

Code: Alles auswählen

SELECT "deine Spalten", IFNULL(DATEDIFF('dd',"2OK","AA"),CASEWHEN(DATEDIFF('dd',"1OK","AA")=0,1,DATEDIFF('dd',"1OK","AA"))) AS "wie du willst" FROM "Tabellenname"
Gruss Bernd
Antworten