Sto cercando di eseguire una semplice query per ottenere tutte le righe create a novembre:
SELECT COUNT(*)
FROM dbo.profile
WHERE [Created] BETWEEN '2014-11-01 00:00:00.000'
AND '2014-11-30 23:59:59.997';
Resi SMSS:
La conversione di un tipo di dati varchar in un tipo di dati datetime ha prodotto un valore fuori intervallo.
Non capisco perché i dati vengano convertiti da varchar a datetime quando 'Creato' è impostato su datetime:
Devo dire al server che "Creato" è datetime? In caso contrario, perché ricevo questo messaggio varchar?
Modifica: il valore nel database era YYYY-MM-DD
. La risposta di @SqlZim sotto dice che devo usare convert () per dire a sql quale formato è la data nel db - e per sostituire il carattere dello spazio con la lettera T:
select count(*)
from dbo.profile
where [created] between convert(datetime,'2014-11-01T00:00:00.000')
and convert(datetime,'2014-11-30T23:59:59.997');`
CONVERT(DATE, '20141201')
se il tuo bisogno di essere esplicito prevalesse su tutto il resto. Inoltre, se la colonna sottostante è un tipo di data / ora, questo non è davvero necessario. DiciWHERE Active = CONVERT(BIT, 1)
di evitareWHERE Active = 1
di essere interpretato come unINT
?