Seite 1 von 2
DATUMS FELDER
Verfasst: Mi, 18.04.2007 14:51
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
Verfasst: Mi, 18.04.2007 15:25
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"
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
Verfasst: Mi, 18.04.2007 15:37
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

Verfasst: Mi, 18.04.2007 16:08
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
Verfasst: Mi, 18.04.2007 16:15
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
Verfasst: Mi, 18.04.2007 16:35
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!
Verfasst: Mi, 18.04.2007 17:01
von berndkli
War ich irgendwie zu schusselig - hab's jetzt aber korrigiert damit erst keine Werwirrtümer aufkommen.
Gruss Bernd
Verfasst: Mi, 18.04.2007 17:22
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?
Verfasst: Mi, 18.04.2007 17:44
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
Verfasst: Mi, 18.04.2007 17:54
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

Verfasst: Do, 19.04.2007 09:25
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

Verfasst: Do, 19.04.2007 10:37
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
Verfasst: Do, 19.04.2007 11:14
von gei3r
war ja nicht anders zu erwarten...
ES FUNKTIONIERT!
*tasse_kaffe_rüberschieb*
vielen Dank
Gruß gei3r
Verfasst: Do, 26.04.2007 09:54
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
Verfasst: Do, 26.04.2007 12:01
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