Um eine Chance zu halten von einem Index für die [date]
Spalt (auch wenn man heute nicht mehr existiert, kann es in der Zukunft), versuchen:
AND [date] >= DATEADD(DAY, 0, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP))
AND [date] < DATEADD(DAY, 1, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP));
Wenn Sie SQL verwenden Server 2008 oder besser, können Sie etwas tun, den Code zu verkürzen, aber immer noch die Verwendung eines Index auf [date]
machen, wenn ein solches vorhanden ist:
AND CONVERT(DATE, [date]) = CONVERT(DATE, CURRENT_TIMESTAMP);
EDIT
Da Sie verwirrt zu sein scheinen, warum 3/6/2012
6. März ist und nicht 3. Juni ich könnte darauf hindeuten, dass an Stelle mehrdeutig Datumsliterale wie '3/6/2012'
in die Datenbank manuell Einfügen Sie die Spalte eine Standard, wie zB:
ALTER TABLE dbo.table_roaster_time_table
ALTER COLUMN [date] DATETIME NOT NULL;
ALTER TABLE dbo.table_roaster_time_table
ADD CONSTRAINT df_date DEFAULT (CURRENT_TIMESTAMP)
FOR [date];
Wenn Sie Datumsliterale einfügen gehen dann zumindest verwenden, um ein sicheres und eindeutiges Format, wie YYYYMMDD
:
INSERT dbo.table_roaster_time_table([date]) VALUES('20120603');
Jetzt gibt es keine Verwirrung.
es ist nicht von Nutzen. Ich habe beide Antworten ausprobiert. aber der Datentyp, den ich für das Datum eingestellt habe, ist datetime. Eine andere Sache ist, dass ich keinen statischen Wert wie '6/01/2012' verwenden kann, da ich den Zeitplan der Röster auf täglicher Basis festlegen möchte und dafür täglich aktuelles Datum möchte. Ich habe auch DAY (date) = Day (getdate() verwendet, aber es funktioniert auch nicht. und ruft null Wert für timeid ab, aber ich habe 2 Datensätze bereits drin 1 habe 3/6/2012 und der andere hat 2/6/2012 Datum und Aufzeichnungen – iConfused
Sind Sie sicher "3/6/2012" ist 3. Juni und nicht 6. März? –
Sie sollten auch vermeiden, reservierte (und sehr vage) Wörter wie "date" als Spaltennamen zu verwenden. 'Created_date' ist länger aber es vermeidet ein reserviertes Schlüsselwort und beschreibt die Daten in dieser Spalte besser .. –