Usuário com melhor resposta
Duvida na conversão de data

Pergunta
-
Olá pessoal, sou iniciante em C# .NET e tenho um problemão aqui, tenho uma tabela cujo campo Data é do tipo Varchar, eu quero fazer uma busca por intervalo de data através de um método na minha aplicação, só que eu não cosnigo buscar por ess intervalo porque meu campo data é do tipo Varchar, como eu poderia estar fazendo?
Desde já agradeço a todos!
Respostas
-
Dependendo do formato em que a data foi gravada no campo VarChar (yyyy/mm/dd ou mm/dd/yyyy) você pode convertê-la para o tipo Date mais ou menos da seguinte forma:
SELECT * FROM Tabela WHERE Cast(CampoDataVarChar as Date) between '2011/11/01' and '2011/11/30'
Espero que seja útil.
Assinatura: Imoveis em Guarulhos para alugar- Marcado como Resposta Matheus Szmodic sexta-feira, 18 de novembro de 2011 10:15
-
Experimente desta forma:
WHERE CAST(SUBSTRING(DataStr, 7, 4) + '-' + SUBSTRING(DataStr, 4, 2) + '-' + SUBSTRING(DataStr, 1, 2) as DATE) BETWEEN '2011-11-01' and '2011-11-30'
Assinatura: Imoveis em Guarulhos para alugar- Marcado como Resposta Matheus Szmodic sexta-feira, 18 de novembro de 2011 10:14
-
Olá Matheus, também pode utilizar desta forma:
WHERE CONVERT(DATETIME,'17-NOV-2011',103) = @data
Assim tu converte tua data VARCHAR pra DATETIME e pode comparar com a variável @data que já é DATETIME.
O 103 do CONVERT é responsável pelo formato de data que tu quer, os valores para substituir pelo 103, tu pode consultar no link.
http://msdn.microsoft.com/pt-br/library/ms187928.aspx
Ai também já tem orientações de como usa as duas formas, tanto esta quanto a do Gapimex que esta correta.
Espero que ajude, Vlew
- Marcado como Resposta Matheus Szmodic sexta-feira, 18 de novembro de 2011 10:14
-
Boa Tarde,
Eu sugiro que você troque o tipo de dados urgentemente. Se sua tabela tem a data armazenada como VARCHAR e você usa a conversão a cada consulta, você está colocando um overhead na consulta por conta de uma falha de implementação. Vale a pena lembrar que usar um CONVERT na cláusula WHERE vai fazer com que suas consultas façam TABLE SCAN (ou INDEX SCAN). Se a tabela em questão tiver muitos registros, você gastará mais tempo para retornar além de memória e CPU de forma desnecessária.
Maiores detalhes em:
DATEDIFF, CONVERT, SUBSTRING e funções sobre colunas na cláusula WHERE e JOINs
http://gustavomaiaaguiar.wordpress.com/2011/07/03/datediff-convert-substring-e-funes-sobre-colunas-na-clusula-where-e-joins/[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos: http://www.youtube.com/user/gmasql
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta Matheus Szmodic sexta-feira, 18 de novembro de 2011 10:14
Todas as Respostas
-
Dependendo do formato em que a data foi gravada no campo VarChar (yyyy/mm/dd ou mm/dd/yyyy) você pode convertê-la para o tipo Date mais ou menos da seguinte forma:
SELECT * FROM Tabela WHERE Cast(CampoDataVarChar as Date) between '2011/11/01' and '2011/11/30'
Espero que seja útil.
Assinatura: Imoveis em Guarulhos para alugar- Marcado como Resposta Matheus Szmodic sexta-feira, 18 de novembro de 2011 10:15
-
-
Experimente desta forma:
WHERE CAST(SUBSTRING(DataStr, 7, 4) + '-' + SUBSTRING(DataStr, 4, 2) + '-' + SUBSTRING(DataStr, 1, 2) as DATE) BETWEEN '2011-11-01' and '2011-11-30'
Assinatura: Imoveis em Guarulhos para alugar- Marcado como Resposta Matheus Szmodic sexta-feira, 18 de novembro de 2011 10:14
-
Olá Matheus, também pode utilizar desta forma:
WHERE CONVERT(DATETIME,'17-NOV-2011',103) = @data
Assim tu converte tua data VARCHAR pra DATETIME e pode comparar com a variável @data que já é DATETIME.
O 103 do CONVERT é responsável pelo formato de data que tu quer, os valores para substituir pelo 103, tu pode consultar no link.
http://msdn.microsoft.com/pt-br/library/ms187928.aspx
Ai também já tem orientações de como usa as duas formas, tanto esta quanto a do Gapimex que esta correta.
Espero que ajude, Vlew
- Marcado como Resposta Matheus Szmodic sexta-feira, 18 de novembro de 2011 10:14
-
Boa Tarde,
Eu sugiro que você troque o tipo de dados urgentemente. Se sua tabela tem a data armazenada como VARCHAR e você usa a conversão a cada consulta, você está colocando um overhead na consulta por conta de uma falha de implementação. Vale a pena lembrar que usar um CONVERT na cláusula WHERE vai fazer com que suas consultas façam TABLE SCAN (ou INDEX SCAN). Se a tabela em questão tiver muitos registros, você gastará mais tempo para retornar além de memória e CPU de forma desnecessária.
Maiores detalhes em:
DATEDIFF, CONVERT, SUBSTRING e funções sobre colunas na cláusula WHERE e JOINs
http://gustavomaiaaguiar.wordpress.com/2011/07/03/datediff-convert-substring-e-funes-sobre-colunas-na-clusula-where-e-joins/[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos: http://www.youtube.com/user/gmasql
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta Matheus Szmodic sexta-feira, 18 de novembro de 2011 10:14