none
Pesquisa por data RRS feed

  • Pergunta

  • Oi boa tarde, 

    Eu tenho um select que faz uma busca ( pelo inner join) por data, o nome do método é : BuscaPorData, eu fiz ele assim:

    select n.id,n.id_estagio,n.id_concorrente, n.id_produto,n.mensalidade,n.implatacao,n.data,n.id_prospect,n.id_resp,n.historico,
                                                                n.interecao,n.totalImplantacao, n.totalMensalidade, n.mes, n.data_atual, p.assunto nome_assunto, p.nomePropect nome_prospect,e.estagio nome_estagio,pr.produto nome_produto from Negociacao n 
                                                                inner join Prospect p on n.id_prospect= p.id
                                                                inner join Estagio e on n.id_estagio= e.id
                                                                inner join Produto pr on n.id_produto= pr.id WHERE CONVERT(nvarchar(10), n.data 103) = ('%" + dataAtual + "%')");

    Eu tenho um campo dateTimePicker : "dtAltual" que passa uma, para mostrar as informações somente com a data que o usuário precisa e preencher em um gridview, entretanto ele não preenche o grid, acredito que o dateTimePicker passa tbm as horas, por isso vai tentar procurar pela data e hora que foi adicionado...

    E como o usuário não vai saber as horas o sistema não funciona, ou seja, não busca as informações.

    Seria por isso que não está preenchendo o Grid ? se for, como posso resolver ?

    Se não for esse o motivo, como que posso resolver essa questão ?

    segunda-feira, 7 de abril de 2014 18:56

Respostas

  • não entendi muito bem como posso usar o CAST...

    Maria, 

    Desculpe, mas este CAST não vai funcionar no SQL Server 2005.

    Formate seu datetimepicker como "yyyymmdd" e depois concatene com sua consulta:

    string SuaData = dataAtual.Value.ToString("yyyyMMdd");

    Como você utiliza o campo "n.data" como datetime, então você poderá utilizar assim:

    ... WHERE CONVERT(varchar(10),n.data, 120) = '" + dataAtual + "'";


    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta Giovani Cr segunda-feira, 7 de abril de 2014 20:10
    • Não Marcado como Resposta Giovani Cr segunda-feira, 7 de abril de 2014 20:10
    • Marcado como Resposta Maria_15 terça-feira, 8 de abril de 2014 16:34
    segunda-feira, 7 de abril de 2014 19:45
    Moderador

Todas as Respostas

  • Boa tarde,

    Maria, estou com algumas dúvidas em relação a sua questão:

    - qual é o tipo de dados da coluna n.data?

    - qual o valor de dataAtual durante a execução desse código, e como esse valor é atribuido?

    - qual versão do SQL Server você está utilizando?


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 7 de abril de 2014 19:17
  • Maria,

    Antes de tudo, procure identificar o valor do seu objeto datetimepicker. 

    Depois altere sua consulta para buscar sua data, sem a necessidade de conversão como texto, porém realizando um CAST na data para buscar apenas o dia/mes/ano. Veja abaixo:

    select n.id,n.id_estagio,n.id_concorrente, n.id_produto,n.mensalidade,
    n.implatacao,n.data,n.id_prospect,n.id_resp,n.historico,
    n.interecao, n.totalImplantacao, n.totalMensalidade, n.mes, n.data_atual,
    p.assunto nome_assunto, p.nomePropect nome_prospect,e.estagio nome_estagio,
    pr.produto nome_produto from Negociacao n
    inner join Prospect p on n.id_prospect= p.id
    inner join Estagio e on n.id_estagio= e.id
    inner join Produto pr on n.id_produto= pr.id WHERE n.data = CAST(dataAtual AS date);

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    segunda-feira, 7 de abril de 2014 19:21
    Moderador
  • n.data seria um datetime do banco 

    o dadataAtual é um dateTimePicker na execução do código

    a versão é o SQL 2005

    segunda-feira, 7 de abril de 2014 19:29
  • não entendi muito bem como posso usar o CAST...
    segunda-feira, 7 de abril de 2014 19:31
  • não entendi muito bem como posso usar o CAST...

    Maria, 

    Desculpe, mas este CAST não vai funcionar no SQL Server 2005.

    Formate seu datetimepicker como "yyyymmdd" e depois concatene com sua consulta:

    string SuaData = dataAtual.Value.ToString("yyyyMMdd");

    Como você utiliza o campo "n.data" como datetime, então você poderá utilizar assim:

    ... WHERE CONVERT(varchar(10),n.data, 120) = '" + dataAtual + "'";


    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta Giovani Cr segunda-feira, 7 de abril de 2014 20:10
    • Não Marcado como Resposta Giovani Cr segunda-feira, 7 de abril de 2014 20:10
    • Marcado como Resposta Maria_15 terça-feira, 8 de abril de 2014 16:34
    segunda-feira, 7 de abril de 2014 19:45
    Moderador
  • Maria, caso a sua variável esteja retornando o formato 'dd/MM/yyyy', sugiro que você faça o select da seguinte forma:

    select n.id,n.id_estagio,n.id_concorrente, n.id_produto,n.mensalidade,n.implatacao,n.data,n.id_prospect,n.id_resp,n.historico,
                                                                n.interecao,n.totalImplantacao, n.totalMensalidade, n.mes, n.data_atual, p.assunto nome_assunto, p.nomePropect nome_prospect,e.estagio nome_estagio,pr.produto nome_produto from Negociacao n 
                                                                inner join Prospect p on n.id_prospect= p.id
                                                                inner join Estagio e on n.id_estagio= e.id
                                                                inner join Produto pr on n.id_produto= pr.id WHERE CONVERT(nvarchar(10), n.data, 120) =CONVERT(varchar(10),CONVERT(DATETIME,'" + dataAtual + "',103),120);


    segunda-feira, 7 de abril de 2014 19:46
  • Maria, se não é gravado nenhum valor na parte das horas da coluna n.data (fica igual a 00:00:00) então experimente mais ou menos da seguinte forma:

    "WHERE n.data = '" + dataAtual.Value.ToString("yyyyMMdd") + "'";

    Ou se é gravado algum valor na parte das horas:

    "WHERE n.data >= '" + dataAtual.Value.ToString("yyyyMMdd") + 
    "' and n.data < '" + dataAtual.Value.AddDays(1).ToString("yyyyMMdd") + "'";

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 7 de abril de 2014 19:52
  • Obrigado pela ajuda e sugestão de todos, resolveu o meu problema quando converti os valores.
    terça-feira, 8 de abril de 2014 16:32