![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: Delphi/IBDAC
SQL-Abfrage funktioniert nur bedingt
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 |
AW: SQL-Abfrage funktioniert nur bedingt
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. |
AW: SQL-Abfrage funktioniert nur bedingt
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'. |
AW: SQL-Abfrage funktioniert nur bedingt
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 ... |
AW: SQL-Abfrage funktioniert nur bedingt
Zitat:
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. |
AW: SQL-Abfrage funktioniert nur bedingt
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
|
AW: SQL-Abfrage funktioniert nur bedingt
Man könnte auch
Code:
verwenden.
CAST(ITEMEND as DATE) <='30.11.2016'
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. |
AW: SQL-Abfrage funktioniert nur bedingt
Zitat:
|
AW: SQL-Abfrage funktioniert nur bedingt
Oh,
ich nahm an
Delphi-Quellcode:
ist die Möglichkeit ein Datum im länderspezifischen Format zu übergeben??
Datum>='30.11.1977'
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 |
AW: SQL-Abfrage funktioniert nur bedingt
Zitat:
'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 ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz