Al fine di mantenere una possibilità di utilizzare un indice sulla colonna [date]
(anche se non ne esiste oggi, potrebbe in futuro), provare:
AND [date] >= DATEADD(DAY, 0, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP))
AND [date] < DATEADD(DAY, 1, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP));
Se stai usando SQL Server 2008 o meglio, si può fare qualcosa di simile per abbreviare il codice, ma ancora fare uso di un indice su [date]
se ne esiste uno:
AND CONVERT(DATE, [date]) = CONVERT(DATE, CURRENT_TIMESTAMP);
EDIT
Dal momento che ti sembra di essere confuso perché 3/6/2012
è 6 marzo e non il 3 giugno, potrei anche suggerire che invece di inserire manualmente data letterali ambigue come '3/6/2012'
nel database, si effettua la colonna un default come ad esempio:
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];
Se avete intenzione di inserire la data letterali allora almeno utilizzare un formato sicuro e inequivocabile, come ad esempio YYYYMMDD
:
INSERT dbo.table_roaster_time_table([date]) VALUES('20120603');
Ora non c'è confusione.
fonte
2012-06-03 16:04:01
è inutile. ho provato entrambe le risposte di urs. ma il tipo di dati che ho impostato per la data è datetime. un'altra cosa è che non posso usare il valore statico come '6/01/2012' perché voglio impostare il calendario dei girarrosti su base giornaliera e per questo voglio data corrente giornaliera. Ho anche usato DAY (date) = Day (getdate() ma non funziona. e recupera valore null per timeid, ma ho già 2 record in esso 1 hanno il 3/6/2012 e l'altro ha 2/6/2012 data e record – iConfused
Sei sicuro che "3/6/2012" è il 3 giugno e non il 6 marzo? –
Dovresti anche evitare di usare parole riservate (e molto vaghe) come 'date' come nomi di colonne.' Created_date' è più lungo ma evita una parola chiave riservata e descrive meglio i dati in quella colonna. –