AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011

Ein Thema von süden · begonnen am 30. Jan 2013 · letzter Beitrag vom 31. Jan 2013
Antwort Antwort
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#1

SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011

  Alt 30. Jan 2013, 18:36
Datenbank: MS SQL-Server • Version: 2008 • Zugriff über: Delphi ADO
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'
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011

  Alt 30. Jan 2013, 18:39
Du hast ein Datum in einem Integer-Feld mit Namen Date abgelegt?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.292 Beiträge
 
Delphi 12 Athens
 
#3

AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011

  Alt 30. Jan 2013, 18:40
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.



Nachtrag: übersehen, daß in dem Feld das komplette Datum steht... Ich wollte halt mal schneller als DeddyH sein... 2x Nix
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#4

AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011

  Alt 30. Jan 2013, 18:54
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'
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#5

AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011

  Alt 30. Jan 2013, 18:57
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011

  Alt 30. Jan 2013, 18:59
Ich kenne mich nicht so wahnsinnig gut mit MSSQL aus, aber bringt ein expliziter Cast evtl. etwas?
AND (DatePart("m", CAST([DATE] AS DATE)) = 12)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#7

AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011

  Alt 31. Jan 2013, 09:15
Alternativ zum DatePart() lässt sich auch Month() und Year() nutzen.
Setzt aber auch ein Datetime Feld in der DB vor raus.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#8

AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011

  Alt 31. Jan 2013, 12:10
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'
  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-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011

  Alt 31. Jan 2013, 12:19
Könnte es sein, daß dieses Verhalten dem nicht definierten Tag geschuldet ist?

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

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

AW: SQL-Server DatePart "m" = 12 + "yyyy" = 2012 bringt Daten aus 2011

  Alt 31. Jan 2013, 12:30
Man kann das auch anderst lösen:
Delphi-Quellcode:
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;
Diese Vorgehensweise hat den Vorteil, dass man auch andere Zeitintervalle als nur einen Monat angeben kann.
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.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 07:36 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