Estou tentando executar uma consulta simples para obter todas as linhas criadas em novembro:
SELECT COUNT(*)
FROM dbo.profile
WHERE [Created] BETWEEN '2014-11-01 00:00:00.000'
AND '2014-11-30 23:59:59.997';
O SMSS retorna:
A conversão de um tipo de dados varchar para um tipo de dados datetime resultou em um valor fora do intervalo.
Não entendo por que os dados estão sendo convertidos de varchar para datetime quando 'Created' é definido como datetime:
Preciso informar ao servidor que 'Criado' é datetime? Caso contrário, por que estou recebendo essa mensagem varchar?
Editar: o valor no banco de dados era YYYY-MM-DD
. A resposta do @SqlZim abaixo diz que preciso usar convert () para informar ao sql qual o formato da data no db - e substituir o caractere de espaço pela letra 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 sua necessidade de ser explícita substituísse todo o resto. Por outro lado, se a coluna subjacente for do tipo data / hora, isso não é realmente necessário. Você dizWHERE Active = CONVERT(BIT, 1)
para evitarWHERE Active = 1
ser interpretado como umINT
?