Bom Dia AlexandreM,
O SQL Server durante muito tempo não suportava os tipos DATE e TIME. Esses tipos são definidos pelo ANSI e o MySQL assim como muitos outros tem o devido suporte. Apenas no SQL Server 2008 fomos contemplados com esses tipos de dados.
No SQL Server 2005 temos o tipo de dados SMALLDATETIME e o DATETIME. O SMALLDATETIME ocupa 4 bytes e possui um range de datas de 01/01/1900 até próximo de 2079 enquanto o DATETIME vai desde 1753 até 9999 e ocupa 8 bytes. Ambos gravam a hora e não há como omitir isso. No caso do SMALLDATETIME a precisão é de minutos enquanto no DATETIME a precisão é de 1/300 de segundo.
O melhor no SQL Server 2005 é que você utilize os tipos SMALLDATETIME ou DATETIME (se for o caso) e grave a hora como meia-noite sempre no formato YYYYMMDD. Ex: INSERT INTO tbl ('20090121 00:00').
Você não deve utilizar tipos como VARCHAR ou CHAR para armazenar datas. Além de ocupar mais espaço, você terá que fazer diversas validações e comparações que normalmente pioram o desempenho. Para não ter problemas em relação a horas, sugiro que você utilize o exemplo abaixo:
Code Snippet
declare
@t table (data smalldatetime)
insert
into @t values ('20090119 00:05')
insert
into @t values ('20090120 00:05')
insert
into @t values ('20090121 08:15')
insert
into @t values ('20090121 10:00')
insert
into @t values ('20090121 13:00')
insert
into @t values ('20090122 12:00')
-- Selecionar todos os registros de hoje
SELECT
Data FROM @T
WHERE
Data >= CONVERT(CHAR(10),GETDATE(),112)
And
Data < DATEADD(d,1,CAST(CONVERT(CHAR(10),GETDATE(),112) AS SMALLDATETIME))
Admito que não é uma situação muito prática (você pode diminuir a complexidade utilizando variáveis ou tipando os parâmetros com SPs). O SQL Server 2008 isso é bem mais simples visto que há tipos próprios para datas e horas.
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com