W celu utrzymania szansę wykorzystania indeksu na kolumnie [date]
(nawet jeśli nie istnieje dzisiaj, to może w przyszłości), spróbuj:
AND [date] >= DATEADD(DAY, 0, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP))
AND [date] < DATEADD(DAY, 1, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP));
Jeśli używasz SQL Server 2008 lub lepsza, można zrobić coś takiego, aby skrócić kod ale nadal skorzystać z indeksu na [date]
jeśli taki istnieje:
AND CONVERT(DATE, [date]) = CONVERT(DATE, CURRENT_TIMESTAMP);
EDIT
Ponieważ wydaje się być zdezorientowany dlaczego 3/6/2012
jest 06 marca, a nie 03 czerwca, mogę również sugerują, że zamiast ręcznego wstawiania niejednoznaczne date literały jak '3/6/2012'
do bazy danych, należy dokonać kolumna domyślnie takie jak:
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];
Jeśli masz zamiar wstawić datę literały to przynajmniej użyciu bezpiecznego i jednoznacznego formatu, takich jak YYYYMMDD
:
INSERT dbo.table_roaster_time_table([date]) VALUES('20120603');
teraz nie ma nieporozumień.
to bezużyteczne. Próbowałem obu odpowiedzi urs. ale typem, który ustawiłem dla daty, jest datetime. Inną rzeczą jest to, że nie mogę używać wartości statycznej, takiej jak "6/01/2012", ponieważ chcę ustawić harmonogram pieczenia codziennie i do tego chcę dziennej bieżącej daty. użyłem również DAY (date) = Day (getdate(), ale to też nie działa i pobiera wartość null dla timeid, ale mam 2 rekordy już w nim 1 mają 3/6/2012, a drugi ma 2/6/2012 data i zapisy – iConfused
Czy jesteś pewien, że "3/6/2012" to 3 czerwca, a nie 6 marca? –
Należy również unikać używania zastrzeżonych (i bardzo niejasnych) słów, takich jak 'date' jako nazw kolumn.' Created_date' jest dłuższa ale unika zastrzeżonego słowa kluczowego i lepiej opisuje dane w tej kolumnie . –