YYYYMMDD
Vostri criteri dovrebbe leggere:
SELECT CASE When EndDate = '19000101'
THEN NULL ELSE EndDate END, ...other columns...
FROM dbo.Members;
In questo modo, quando si passa una data come 8 settembre, ma non è male interpretato da SQL Server, gli altri lettori, ecc è 09/08/2013
8 settembre o 9 agosto? Dipende da quale parte del mondo sei, giusto? Nel tuo caso va bene, perché il giorno e il mese sono gli stessi, ma non sarà sempre così. Si prega di consultare il seguente articolo:
http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx
(. Favore, per favore, si prega di leggere quel link nella sua interezza)
Infine, se si utilizza DATETIME/SMALLDATETIME
e siete alla ricerca di valori da un giorno specifico, non dovresti usare l'uguaglianza, ma piuttosto una query di intervallo. Ad esempio, per trovare tutte le righe in cui EndDate
cade il 15 aprile 2013, a prescindere dal tempo, si potrebbe dire: (. Read this link to understand why you don't want to use BETWEEN
here)
WHERE EndDate >= '20130415'
AND EndDate < '20130416'
Se siete su SQL Server 2008 o meglio, è ancora possibile ottenere sargibilità su questa colonna con CONVERT
, ma questa è un'eccezione rara, in genere non si desidera utilizzare una funzione su una colonna.
WHERE CONVERT(DATE, EndDate) = '20130415'
Un paio di altre osservazioni - non direttamente correlate alla tua domanda, ma periferici osservazioni circa il vostro codice:
- Always use the schema prefix
- Never use
SELECT *
in production
sguardo nel 'funzione DATEPART'. Vedi http://msdn.microsoft.com/en-us/library/aa258265(v=sql.80).aspx –
@ PM77-1 hai letto la domanda? –
Beh ... l'ho fatto. Ho fatto un errore. Significa "CONVERT". –