AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL-Abfrage funktioniert nur bedingt
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-Abfrage funktioniert nur bedingt

Ein Thema von harfes · begonnen am 30. Nov 2016 · letzter Beitrag vom 2. Dez 2016
Antwort Antwort
Seite 1 von 2  1 2      
harfes

Registriert seit: 25. Jun 2006
Ort: Rand der Scheibe
198 Beiträge
 
Delphi 12 Athens
 
#1

SQL-Abfrage funktioniert nur bedingt

  Alt 30. Nov 2016, 08:07
Datenbank: Firebird • Version: 2.1 • Zugriff über: Delphi/IBDAC
Hallo,

ich benutze folgende SQL-Abfrage, um Daten aus einer Tabelle für einen bestimmten Zeitraum zu bekommen:

select * from PLANUNG where ITEMBEGIN>='01.11.2016' AND ITEMEND<='30.11.2016';

Das Problem: Tabelleneinträge mit Datum 01.11. werden erfasst (>= funktioniert also), Einträge vom 30.11. aber nicht - keine Ahnung, warum das so ist???? Die Befehlssyntax müsste richtig sein, denn wenn ich ITEMEND=<'30.11.2016' schreibe, bekomme ich einen SQL-Fehler.

Hat da jemand eine Idee, was da falsch läuft?

Hartmut
Hartmut
  Mit Zitat antworten Zitat
jobo

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

AW: SQL-Abfrage funktioniert nur bedingt

  Alt 30. Nov 2016, 08:13
Schau Dir mal hier im Forum, wie man Abfragen parametriert und dabei den Datentyp der Spalte berücksichtigt.
Du verwendest Strings an Stelle eines Datums, dabei kann nichts Gutes rauskommen.

Zu dem Thema müsste es dutzende Posts geben.
Gruß, Jo
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#3

AW: SQL-Abfrage funktioniert nur bedingt

  Alt 30. Nov 2016, 08:22
Welchen Type hat denn ITEMEND?
Wenn es TimeStamp ist, dann werden nur Datensätze ITEMEND <= '30.11.2016 00:00' angezeigt.
Entweder du verwendest DATE als Typ oder ITEMEND < '01.12.2016'.
Alexander
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: SQL-Abfrage funktioniert nur bedingt

  Alt 30. Nov 2016, 08:42
Hallo,

bekomme ich einen SQL-Fehler.

Schön, welcher das ist, wäre zur Lösung der Aufgabe sehr hilfreich.
Alles andere (Parameter, <EndDatum+1) wurde ja bereits gesagt.
Ah nein, >StartDatum-1 hatte gefehlt ...
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: SQL-Abfrage funktioniert nur bedingt

  Alt 30. Nov 2016, 08:54
Ah nein, >StartDatum-1 hatte gefehlt ...
Na, noch nicht ausgeschlafen?
Das ist natürlich falsch. Das Problem ist bei diesem klassischen Fehler nur beim End-Datum.
Lösungen dafür wurden schon beschrieben.

Man kann natürlich auch in der Anwendung dafür sorgen, dass wirklich nur das Datum ohne Uhrzeit gespeichert wird. Aber dann müsste zusätzlich auch die Tabelle bereinigt werden. Der Aufwand dürfte da dann aber zu groß werden.
Peter
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: SQL-Abfrage funktioniert nur bedingt

  Alt 30. Nov 2016, 08:57
darüber hinaus wäre auch noch zu beachten ob es überhaupt gültige Datensätze gibt, bei denen beide Bedingungen erfüllt sind - immerhin handelt es sich hier um 2 Spalten
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#7

AW: SQL-Abfrage funktioniert nur bedingt

  Alt 30. Nov 2016, 09:07
Man könnte auch
Code:
CAST(ITEMEND as DATE) <='30.11.2016'
verwenden.
Das hätte aber zur Folge, dass ein evt. vorher vorhandener und verwendeter Index auf ITEMEND von FB
nicht mehr verwendet wird.
Ob das von Nachteil ist muss im Einzelfall geprüft werden.
Alexander
  Mit Zitat antworten Zitat
EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#8

AW: SQL-Abfrage funktioniert nur bedingt

  Alt 30. Nov 2016, 09:35
...
Die Befehlssyntax müsste richtig sein, denn wenn ich ITEMEND=<'30.11.2016' schreibe, bekomme ich einen SQL-Fehler.
...
Die Syntax ist ja auch korrekt ("=<" ist es nicht). Wenn Du Datumsfelder als String vergleichen willst, musst Du sie umgekehrt abbilden, also jjjjmmtt; eleganter ist allerdings die Verwendung von entsprechenden Datumtypen der Datenbank.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: SQL-Abfrage funktioniert nur bedingt

  Alt 30. Nov 2016, 11:44
Oh,
ich nahm an Datum>='30.11.1977' ist die Möglichkeit ein Datum im länderspezifischen Format zu übergeben??
Es gibt ja Datenbanken, die so etwas angeblich können. Um Mißverständnissen vorzubeugen, Es ist immer sauberer mit Datumswerten zu arbeiten.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#10

AW: SQL-Abfrage funktioniert nur bedingt

  Alt 30. Nov 2016, 11:54
Oh,
ich nahm an Datum>='30.11.1977' ist die Möglichkeit ein Datum im länderspezifischen Format zu übergeben??
Es gibt ja Datenbanken, die so etwas angeblich können. Um Mißverständnissen vorzubeugen, Es ist immer sauberer mit Datumswerten zu arbeiten.
Firebird versteht auch das länderspezifische Datums-Format.
'yyyy-mm-dd' geht aber immer, wenn schon mit Strings gearbeitet wird.

[Edit]
Aussage "versteht auch das länderspezifische Datums-Format" ist nur teilweise richtig
siehe hier http://www.firebirdfaq.org/faq137/
Alexander

Geändert von alex517 (30. Nov 2016 um 12:08 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:39 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