Cast Datum in Informix
Habe ich noch nie verwendet, Informix, bevor und ich bin versucht zu schreiben Sie eine Abfrage, die Datensätze zurückgibt über die letzten 365 Tage.
Hier ist die Abfrage, die ich habe versucht, zu verwenden:
Select * from Visit where vis_mod_dt between today-365 and today;
Dass gibt keine Datensätze zurück, obwohl ich weiß, dass es Daten für die letzten 365 Tage. Ich vermute, dass die vis_mod_dt in nicht eine wahre Datum Spalte, obwohl es zeigt wie '12/31/1899' ich habe versucht, die Besetzung dieser Spalte mit:
select * from visit where date(vis_mod_dt) between today-365 and today;
Diese noch keine Daten zurückgibt.
Irgendwelche Ideen?
InformationsquelleAutor | 2009-10-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Informix-DATUMS-format
Sich bewusst sein, dass das Datum 1899-12-31 entspricht der internen date-Darstellung der null (0). Das heißt, intern, Informix speichert die Datumswerte in einem 4-byte-integer, und zählt die Anzahl der Tage seit 1899-12-31, also Tag 1 war 1900-01-01 (und da es weiß, dass 1900 ein Schaltjahr nicht war, Tag 60 war 1900-03-01).
Diese Tatsache macht mir sorgen über das, was in Ihrer Tabelle. Jedoch, wenn die Daten in Ihrer Tabelle kann nicht in ein DATUM konvertiert auf Anfrage, normalerweise würden Sie eine Fehlermeldung erhalten.
Was ist deine Tabelle schema?
Sinnvoll ist es, für Sie zu etablieren, die das schema entweder mit DB-Zugriff und die Info/option Tables, oder verwenden Sie DB-Schema:
Den DB-Schema-Ausgang ist besser geeignet für das hinzufügen zu Ihrer Frage.
Die Abfrage-Ausdrücke mit 'HEUTE-365' und 'HEUTE' sollte funktionieren - wenn es Daten zu wählen.
Umgebungsvariable DBDATE
Gibt es eine Umgebungsvariable DBDATE, dass Sie brauchen, um die Dinge zu arbeiten - Konvertierung von string-Darstellung der Termine. Da Sie wahrscheinlich in Großbritannien (von Ihrem Symbol), dann dürfen Sie Sie wollen und brauchen, um den Wert von DBDATE:
Dieser sagt, dass die Daten bestehen aus Tag, Monat, eine 4-stellige Jahr und das '/' ist als das gewünschte Trennzeichen. Sie werden nicht überrascht sein zu erfahren, dass die vermeintliche Standard-Wert ist in der Regel 'MDY4/", für US-amerikanisches format; ich benutze " Y4MD-' gewöhnlich, so sehe ich das DATUM-Wert der gleiche wie DATETIME "JAHR ZU TAG", die den ISO 8601:2004 Schreibweise für ein Datum. (Es hat viele Vorteile: es ist eindeutig und naiv Sortier-algorithmen, Sortieren, Termine in Datum um.) Es gibt tatsächlich eine Menge von Verfahren in den hintergrund-IDS (IBM Informix Dynamic Server - die, so vermute ich, ist das DBMS, das Sie verwenden; es gibt einige alternativen, die sind auch Informix-DBMS), so dass strings mit 2-stelligen Datumsangaben werden in der Regel korrekt Umgerechnet, aber Sie sind vieldeutig und nicht wünschenswert) ist, und Separatoren, als '/' erkannt wird auf input, aber der Schrägstrich wird verwendet, auf 'Ausgang' (bei der Umwandlung von DATUM in string).
Informationen, um die Antwort auf diese Frage - 1st Edition.
Wenn das, was hier nicht hilft, dann empfehle ich, mit der Bearbeitung Ihrer Frage enthalten:
Wenn Ihre Tabelle groß ist (viele Spalten), versuchen Sie, wählen Sie die Schlüssel-Spalten (
vis_mod_dt
ist bei weitem der wichtigste). Im Idealfall brauchen Sie keine scroll-Balken in der Anzeige.Stellen Sie sicher, dass Sie nicht enthalten keine sensiblen Informationen.
Informationen, um die Antwort auf diese Frage - 2nd Edition
Ich werde Ihnen helfen, wenn Sie Ihr Augenmerk auf die Fragen, die ich Sie bitte. Ich kann dir nicht helfen, wenn Sie nicht zahlen Aufmerksamkeit auf die Fragen, die ich Fragen. Und bitte Editiere deine Frage, anstatt das hinzufügen von Informationen, die als 'Antwort'.
Was ist das schema für die Tabelle? Was ist die Ausgabe von:
Was bekommen Sie von:
Haben Sie die Umgebungsvariable DBDATE gesetzt? Wenn ja, was ist der Wert?
Hinweis: wenn Sie nicht copy ' N ' Paste die Abfragen oben, dann werden Sie wahrscheinlich nicht brauchen, um die zitierte '"informix".' - Attribute auf die system-Katalog; allerdings, wie geschrieben, werden die Abfragen auf jedem vorhandenen Informix-Datenbank - OnLine 5.x, SE-5.x oder 7.x, IDS-7.x, XPS 8.x, 9 IDS.x oder 10.x oder 11.x - und jede Art der Datenbank (nicht protokollierte, protokolliert, ANSI-MODUS). Ich würde die Verwendung der JOIN-notation, außer, dass einige der älteren Versionen nicht unterstützen - aber Sie müssen sich auf sehr alte Versionen, dass das ein problem.
können Sie nicht brauchen, um Sie zu wirken; - IDS ist ziemlich gut bei der Konvertierung für Sie, vor allem strings in andere Datentypen. Ihre
DATE(vis_mod_dt)
Aufruf ist nicht unbedingt ein cast (das wäreCAST(vis_mod_dt AS DATE)
odervis_mod_dt::DATE
), aber es wird eine Konvertierungs-Funktion, pre-dates, die neben der expliziten casting-IDS. Der einfachste Weg, um zu bestimmen, den Daten-Typ ist zum ausführen von DB-Schema, wie bereits in meiner Antwort. Die einfachste ist die Verwendung von DB-Access, wählen Sie die Datenbank, dann verwenden Sie die Tabelle, Menü-und info-option zu finden, die die Spalte Typ. Lesen Sie bitte das Ende meiner Antwort für was anderes benötigt wird.Dies ist ein wenig verwirrend, denn wenn ich führen Sie die folgenden Daten abrufen: select count(*) from besuchen, wo vis_mod_dt zwischen "10/01/2008" und "10/01/2009"
Danke, wenn ich laufen schema für die Tabelle select-Anweisung, bekomme ich ColType 7 für vis_mod_date, und nach IBM Informix-Dokumentation, das ist ein Date-Datentyp. Nächste Frage, war das HEUTE eingeführte Funktion in einer späteren version von Informix? In MS-SQL-Server, wenn ich führen Sie die folgenden bekomme ich das aktuelle Datum: select GetDate() Aber wenn ich das folgende in Informix, bekomme ich einen syntax error: Wählen Sie HEUTE oder Wählen Sie HEUTE (), oder Wählen Sie HEUTE -365 Dank!
Eigentlich, wenn ich WÄHLEN Sie HEUTE, HEUTE-365 VON "informix".systables WHERE tabid = 1; bekomme ich zwei (Ausdruck) Spalten, 10/13/1981 und 10/13/1980
InformationsquelleAutor Jonathan Leffler
Dies ist ein wenig verwirrend, denn wenn ich das folgende, ich bekomme Daten:
select count(*) from besuchen, wo vis_mod_dt zwischen "10/01/2008" und "10/01/2009"
InformationsquelleAutor
wie etwa das entladen der Tabelle in ascii-Datei, überprüfen Sie die entladen vis_mod_dt Werte zu sehen, wenn Sie konform zu DBDATE=MDY4 (mmttjjjj) format?.. wenn Sie das tun, VERÄNDERN vis_mod_dt TYP DATE sein, wenn es nicht eine DATUM-Spalte, dann LADEN entladen Tisch zurück.
: "ZWISCHEN heute-365 UND heute" - Teil der SELECT-Anweisung funktioniert bei mir in meine apps.
InformationsquelleAutor Frank R.