2012-08-16 13 views
11

Come si esegue un'istruzione LIKE su una colonna del tipo di dati DateTime in SQL Server?Istruzione SQL LIKE su un tipo DateTime

Se corro il seguente SQL mi restituisce tutte le date con 2009 a.

SELECT * FROM MyTable where CheckDate LIKE '%2009%' 

Tuttavia, se voglio tutte le Ott, Nov Dic & date che ci si aspetta di essere in grado di fare il seguente:

SELECT * FROM MyTable where CheckDate LIKE '%2009-1%' 

Ma questo non mi restituisce nulla!

Fornisco all'utente un'opzione di filtro in cui digita la stringa della data e mentre digitano filtro i dati. Quindi se digitano "20", desidero restituire tutte le date con "20" entro la data (quindi potrebbero essere tutte le date 2012 o un valore di data come 06/20/1999)

Qualcuno può aiutare ?

sto usando 2008.

Grazie in anticipo SQL Server.

+0

Grazie per la risposta, ho aggiornato il lavoro con maggiori dettagli su quello che sto cercando di fare – Sun

+0

Hai controllato che gli utenti vogliono un tale impianto? Non ho mai voluto trovare "tutte le attività che accadevano il giorno 10 di qualsiasi mese, o ad ottobre o nel 2010". –

risposta

20

È possibile utilizzare la funzione DATEPART per estrarre parti di date. Essa dovrebbe anche rendere le vostre domande più esplicito su ciò che si sta cercando di realizzare:

funzioni
SELECT * FROM MyTable 
where DATEPART(year,CheckDate)=2009 and 
     DATEPART(month,CheckDate) between 10 and 12 

(ci sono anche indicati in modo specifico, come ad esempio MONTH e YEAR, ma io preferisco DATEPART per la coerenza poiché può accedere a tutti i componenti di un datetime)

Si dovrebbe cercare di evitare di pensare a datetime s come avere qualsiasi tipo di formato di stringa. Trattarli come stringhe è una delle maggiori fonti di errori che incontriamo.

2

Si può usare qualcosa di simile:

SELECT * 
FROM MyTable 
WHERE CheckDate >= '2009-10-01' AND CheckDate < '2010-01-01'; 
+1

E mentre ci sei - prova a utilizzare un formato di data ** ** indipendente dalla lingua - come "20091001" - che funziona per ** tutte ** le versioni linguistiche di SQL Server .... –

+3

Pericoloso. Mentre la query originale ha forzato la conversione di un 'datetime' in una stringa (e quindi produrrà sempre un valore formattato in modo coerente), questo costringe le conversioni da stringa a' datetime' e, in base alle impostazioni regionali, potrebbe infatti richiedere qualsiasi cosa a partire dal 10 gennaio 2009 –

5

Se avete bisogno di utilizzare Like operatore (per qualche motivo) è necessario convertire la colonna DateTime in un varchar.

SELECT * 
FROM MyTable 
WHERE CONVERT(VARCHAR, CheckDate, 120) LIKE '%2009-1%'