![]() |
Datenbank: MS SQL-Server • Version: 2008 • Zugriff über: Delphi ADO
SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011
Hallo,
ich krieg's nicht gebacken. Ich habe Datumswerte als Integer abgespeichert, wenn ich nun die: "SELECT * FROM tStunden WHERE (MitarbeiterID = '004') AND (DatePart("m", DATE) = 12) AND (DatePart("yyyy", DATE) = 2012)" absetze, Bekomme ich Werte aus 12/2011. Ich arbeite zum 1. mal mit SQL-Server - natürlich unter Termindruck - und kann mir das nicht erklären. In Access hat es immer funktioniert. Gruß 'süden' |
AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011
Du hast ein Datum in einem Integer-Feld mit Namen Date abgelegt?
|
AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011
Hallo...
da hätten wir mal wieder den Hinweis mit Parametern zu arbeiten. Da es warscheinlich diese Aggregatfunktion nicht gibt, wäre dann die Möglichkeit gegeben, die Werte für den Datumspart vorher zu extrahieren und vernünftig als Parameter zu übergeben. :hi: Nachtrag: übersehen, daß in dem Feld das komplette Datum steht... :oops: Ich wollte halt mal schneller als DeddyH sein... 2x Nix :evil: |
AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011
Du hast ein Datum in einem Integer-Feld mit Namen Date abgelegt?
Jau, aber nicht ich (würde ich doch niemals tun!!!). Es ist ein altes Programm, ziemlich umfangreich, Zeitdruck usw. ich bringe es auf SQL-Server, die DB soll unverändert bleiben. Das DATE ist aber geklammert = [DATE], aber trotzdem sollte es laufen. Datum im Integer finde ich gut, ist ja sowieso ein Double. Datum, Stunden und Minuten werden separat eingegeben und berechnet, dann macht es Sinn, oder nicht? Aber das Phänomen bleibt. Da rechnet was ziemlich falsch. Gruß 'süden' |
AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011
Nachtrag:
Wenn ich die Integerwerte in die Abfrage einsetze (Between 41123 AND 41234) geht es wunderbar. Aber wie komme ich jetzt schnellstens an die dran für: diesen Monat, letzten Monat, ... EncodeDate usw., klar. |
AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011
Ich kenne mich nicht so wahnsinnig gut mit MSSQL aus, aber bringt ein expliziter Cast evtl. etwas?
SQL-Code:
AND (DatePart("m", CAST([DATE] AS DATE)) = 12)
|
AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011
Alternativ zum DatePart() lässt sich auch Month() und Year() nutzen.
Setzt aber auch ein Datetime Feld in der DB vor raus. |
AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011
Zusatzinformation:
Es soll auch weiterhin mit einer Access-DB laufen. Natürlich geht das nicht ohne Anpassung, sollte aber im Rahmen bleiben. Was mich wundert ist, dass die DB schon den Monat rausschmeißt, die Abfrage also läuft, aber zusätzlich noch 2 - 3 Tage aus dem vergangenen Monat - trotz der eindeutigen Angaben - "m" = 12, "yyyy" = 2012. Gruß 'süden' |
AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011
Könnte es sein, daß dieses Verhalten dem nicht definierten Tag geschuldet ist?
Gruß K-H |
AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011
Man kann das auch anderst lösen:
Delphi-Quellcode:
Diese Vorgehensweise hat den Vorteil, dass man auch andere Zeitintervalle als nur einen Monat angeben kann.
jahr := 2012;
monat := 12; ADOQuery1.SQL.Text := 'SELECT * FROM tStunden'#13#10+ 'WHERE (MitarbeiterID = :MitarbeiterID)'#13#10+ 'AND [DATE] >= :datevon AND [DATE] < :datebis'; ADOQuery1.Parameters.ParamValues['MitarbeiterID'] := '004'; ADOQuery1.Parameters.ParamValues['datevon'] := EncodeDate(jahr,monat,1); Inc(monat); if monat > 12 then begin monat := 1; Inc(jahr); end; ADOQuery1.Parameters.ParamValues['datebis'] := EncodeDate(jahr {=2013},monat {=1},1); ADOQuery1.Open; Man beachte, dass der 1.1.2013 nicht in den Daten enthalten ist; der Zeitpunktt 31.12.2012 23:59:59 aber schon. Dies funktioniert ohne Änderungen für MSAccess als auch für MS SQL Server 7/2000/2005/2008/2012. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 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-2025 by Thomas Breitkreuz