AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein MSSQL Stored Procedure -> datetime vergleichsprobleme???
Thema durchsuchen
Ansicht
Themen-Optionen

MSSQL Stored Procedure -> datetime vergleichsprobleme???

Offene Frage von "cherry"
Ein Thema von cherry · begonnen am 7. Mai 2008 · letzter Beitrag vom 12. Mai 2008
Antwort Antwort
Seite 2 von 4     12 34      
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#11

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme

  Alt 7. Mai 2008, 18:16
Zitat von alzaimar:
Die Funktion 'DateDiff' wird den Einsatz eines Index verhindern....
Das mit dem Index stimmt natürlich.

Aber der Minutenbereich ist doch eigendlich zu groß?
WHERE Table.DateTimeField Between DateAdd(minute,-1,@Date) and DateAdd (minute,1,@Date) Damit wird doch nicht nur die gewünschte Zeit, sondern auch 1 Minute vorher/nachher zurückgeliefert, oder?
Gruß
Norman
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#12

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme

  Alt 7. Mai 2008, 21:51
Dann nimm halt ne Sekunde ('second') oder 'millisecond'.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#13

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme

  Alt 8. Mai 2008, 07:02
Zitat von alzaimar:
Die Funktion 'DateDiff' wird den Einsatz eines Index verhindern. Ich verwende bei DateTime-Vergleichen immer 'BETWEEN', hier wäre das z.B.
SQL-Code:
WHERE Table.DateTimeField Between DateAdd(minute,-1,@Date) and DateAdd (minute,1,@Date)
  AND dbo.DateOnly (Table.DateTimeField) = dbo.DateOnly(@Date)
Wobei 'dbo.DateOnly' eine UDF ist, die den Datumsanteil eine DateTime-Wertes liefert.
SQL-Code:
CREATE FUNCTION [dbo].[DateOnly] (@Date DateTime)
RETURNS Datetime AS
BEGIN
  Return cast (floor (cast (@Date as float)) as DateTime)
END
Die Werte der BETWEEN-Klausel werden vom Optimizer in Konstanten (ggü der Tabelle) übersetzt und damit kann der Index greifen. Bei Datediff geht das nicht, weil ja jedesmal die Differenz gebildet werden muss.
also wenn ich jetzt mal von dem aus gehe... habe ich noch ein paar fragen...

1.) reicht das nicht schon alleine?
WHERE Table.DateTimeField Between DateAdd(second,-1,@Date) and DateAdd (second,1,@Date) 2.) wozu ist denn das hier jetzt genau?!:
AND dbo.DateOnly (Table.DateTimeField) = dbo.DateOnly(@Date) 3.) und was die Funktion DateOnly genau aus meinem Datum macht erkenn ich auch nicht so auf den ersten Blick?!

aber vielen Dank schon mal für die vielversprechenden Antworten

//EDIT

sehe ich das richtig:
dieses hier:
WHERE Table.DateTimeField Between DateAdd(second,-1,@Date) and DateAdd (second,1,@Date) vergleicht nur die sekunden, nicht aber das Datum und die Zeit auf sekunden genauigkeit?

deshalb muss ich mit AND dbo.DateOnly (Table.DateTimeField) = dbo.DateOnly(@Date) noch das Datum vergleichen?

trotzdem was macht die Funktion DateOnly genau?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#14

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme

  Alt 8. Mai 2008, 07:35
Hi,

Zitat von cherry:
trotzdem was macht die Funktion DateOnly genau?
intern werden datetime-Werte als float gespeichert, wobei das Datum im
Vorkomma- und die Zeit im Nachkommateil abgebildet sind. Die DateOnly-Funktion
macht nichts anderes, als den Nachkommateil abzuschneiden.
Gruß
Norman
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#15

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme

  Alt 8. Mai 2008, 07:41
achso, dann kapier ich jetz DateOnly

aber: hab mal kurz einen neuen Versuch gestartet und in der WHERE Klausel steht jetzt nur noch folgendes:

weder so...

[t_bb_folder_info].[date_time] Between DateAdd(hour,-1,@date_time) and DateAdd(hour,1,@date_time) noch so...

DateAdd(hour,0,[t_bb_folder_info].[date_time]) Between DateAdd(hour,-1,@date_time) and DateAdd(hour,1,@date_time) ... findet sql die gewünschten datensätze mein SELECT SUM() gibt also NULL resp. 0 zurück ;-(

ich mach wohl noch was anderes falsch, aber was denn?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#16

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme

  Alt 8. Mai 2008, 07:58
Hi,

um zu sehen, mit welchen Werten gearbeitet wird, lass dir die Daten doch mal anzeigen:

select DateAdd(hour,-1,@date_time), DateAdd(hour,1,@date_time), [t_bb_folder_info].[date_time] ... Das hier übrigends...
where DateAdd(hour,0,[t_bb_folder_info].[date_time]) Between ... hat wieder das Problem mit dem Index, da die Tabellenspalte in einer Funktion "verpackt" ist
und somit kein Index verwendet werden kann.
Gruß
Norman
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#17

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme

  Alt 8. Mai 2008, 07:58
wie wärs dann damit?

CAST([t_bb_folder_info].[date_time] AS CHAR(25)) = CAST(@date_time AS CHAR(25)) geht bei mir aber leider auch net...
ich hab so langsam aber sicher das Gefühl, dass bei mir etwas ganz faul ist...

denn wenn ich ein select auf mein gespeichertes datum mache sieht das so aus:
2008-05-07 15:16:32.000 wenn ich nun meine procedure ausführe und als @date_time parameter ebenfalls
2008-05-07 15:16:32.000 mitgebe funktioniert ja das alles nicht mit keiner bisher getesteten variante...

Zitat von NormanNG:
intern werden datetime-Werte als float gespeichert, wobei das Datum im
Vorkomma- und die Zeit im Nachkommateil abgebildet sind. Die DateOnly-Funktion
macht nichts anderes, als den Nachkommateil abzuschneiden.
kann ich jetzt davon ausgehen das z.B. eben ein mit select ausgelesenes feld z.B. "2008-05-07 15:16:32.000" ergibt, nicht dasselbe ist wie: CAST("2008-05-07 15:16:32.000" AS datetime); ???

//EDIT

Zitat von cherry:
wie wärs dann damit?
CAST([t_bb_folder_info].[date_time] AS CHAR(25)) = CAST(@date_time AS CHAR(25))
erübrigt sich wohl wegen des indexes, richtig?! hab doch schon was gelernt
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#18

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme

  Alt 8. Mai 2008, 08:04
Zitat von NormanNG:
Hi,

um zu sehen, mit welchen Werten gearbeitet wird, lass dir die Daten doch mal anzeigen:
select DateAdd(hour,-1,@date_time), DateAdd(hour,1,@date_time), [t_bb_folder_info].[date_time] ...
funktioniert, aber was bringt mir das nun... (sorry 1. morgen in der früh... 2. ich bin kein blitzmerker)

ausgabe:

SQL-Code:
2008-07-05 14:16:32.000 ¦ 2008-07-05 16:16:32.000 ¦ 2008-05-07 15:16:32.000
2008-07-05 14:16:32.000 ¦ 2008-07-05 16:16:32.000 ¦ 2008-05-07 15:16:32.000
2008-07-05 14:16:32.000 ¦ 2008-07-05 16:16:32.000 ¦ 2008-05-07 15:16:32.000
2008-07-05 14:16:32.000 ¦ 2008-07-05 16:16:32.000 ¦ 2008-05-07 15:16:32.000
usw
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#19

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme

  Alt 8. Mai 2008, 08:09
Hi,

lass doch erstmal alles Andere weg und bau dir eine Select-Anweisung
zusammen, die das Gewünschte liefert. Dazu nimmst du das SQl-Query-Tool oder
die Management-Console von MS. Wenn das Select dann funktioniert, gehts
in Delphi weiter...

Wenn´s dann immer noch nich klappt, poste mal eine paar Beispieldaten samt deinem
kompetten Select.


Zitat:
funktioniert, aber was bringt mir das nun... (sorry 1. morgen in der früh... 2. ich bin kein blitzmerker)
Das das funktioniert ist klar. Du sollst dir die Spalten ansehen und prüfen, ob deine
Bedingung richtig fornuliert ist.
Gruß
Norman
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#20

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme

  Alt 8. Mai 2008, 08:15
SQL-Code:
declare
  @date_time datetime
SET @date_time = CAST('2008-05-07 15:16:32.000AS datetime);
SELECT folder_size FROM [t_bb_folder_info]
where [t_bb_folder_info].[date_time] Between DateAdd(hour,-1,@date_time) and DateAdd(hour,1,@date_time)
gibt mir keinen einzigen datensatz zurück...
obwohl

SQL-Code:
declare
  @date_time datetime
SET @date_time = CAST('2008-05-07 15:16:32.000AS datetime);
SELECT DateAdd(hour,-1,@date_time), DateAdd(hour,1,@date_time), [t_bb_folder_info].[date_time] FROM [t_bb_folder_info]
folgendes zurück gibt:

SQL-Code:
2008-07-05 14:16:32.000 ¦ 2008-07-05 16:16:32.000 ¦ 2008-05-07 15:16:32.000
2008-07-05 14:16:32.000 ¦ 2008-07-05 16:16:32.000 ¦ 2008-05-07 15:16:32.000
2008-07-05 14:16:32.000 ¦ 2008-07-05 16:16:32.000 ¦ 2008-05-07 15:16:32.000
2008-07-05 14:16:32.000 ¦ 2008-07-05 16:16:32.000 ¦ 2008-05-07 15:16:32.000
.
.
.
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 12:21 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