none
Query SELECT usando LIKE e parameter RRS feed

  • Pergunta

  • Boa tarde, preciso fazer uma consulta onde eu uso o 'PARAMETER.ADD' e também usar um LIKE '%'maskedtextbox.text'%' para buscar dados no meu banco de dados onde a DATA seja igual a digitata. O problema é, neste meu campo DateTime eu tenho data e HORA, ai complica... Já tentei de todas as maneiras que achei na net, a útlima é a que segue abaixo, e mesmo assim ele apenas me retorna os campos que contenham apenas a DATA digitada. Exemplo:

    No meu campo DateTime dt_inserção, tenho 2 rows:

    1- 21/09/2012

    2- 21/09/2012 14:51:36

    minha query retorna apenas o(s) campo(s) que contenham apenas a DATA... Quero que retorne TUDO que tenha aquela data, inclusive os que tem HORAS.

    MySqlCommand cmd = new MySqlCommand();
                string sql = "SELECT id_convidado, nome, matricula, cod_dependente, dt_insercao, usr_insercao, dt_saida, usr_saida, status FROM convidado_acesso WHERE  dt_insercao LIKE CONCAT('%',@data,'%')";
                cmd.CommandText = sql;
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add(new MySqlParameter("@data", MySqlDbType.DateTime)).Value = mask.Text;


    • Editado PlayHardGoPro terça-feira, 25 de setembro de 2012 19:37
    terça-feira, 25 de setembro de 2012 19:37

Respostas

  •  --------------------- UPDATE ------------------------------------------

    Boa Tarde pessoa =)

    só vim aqui para avisa-los de que eu consegui resolver o meu problema sem precisar deixar os campos separados (Data em um campo DATE e hora em um campo TIME)...

    Era mais simples do que eu pensava (sempre é... haha)

    Agradeço a boa vontade de todos, mais uma vez mto obrigado !

    quarta-feira, 26 de setembro de 2012 11:14

Todas as Respostas

  • Por que vc está usando LIKE em um campo de data?

    Se quer só passar a data sem hora  pode usar o toShorDateString() (mas acho que é gambis :p)

    MySqlCommand cmd = new MySqlCommand();
                string sql = "SELECT id_convidado, nome, matricula, cod_dependente, dt_insercao, usr_insercao, dt_saida, usr_saida, status FROM convidado_acesso WHERE  dt_insercao LIKE CONCAT('%',@data,'%')";
                cmd.CommandText = sql;
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add(new MySqlParameter("@data", MySqlDbType.DateTime.ToShortDateString()));


    Sou só uma little padawan que tem sorte de andar com jedis, mas farei o possível por quem precisar :)

    Se precisar: @MayogaX

    terça-feira, 25 de setembro de 2012 19:44
  • Por que vc está usando LIKE em um campo de data?

    Se quer só passar a data sem hora  pode usar o toShorDateString() (mas acho que é gambis :p)

    MySqlCommand cmd = new MySqlCommand();
                string sql = "SELECT id_convidado, nome, matricula, cod_dependente, dt_insercao, usr_insercao, dt_saida, usr_saida, status FROM convidado_acesso WHERE  dt_insercao LIKE CONCAT('%',@data,'%')";
                cmd.CommandText = sql;
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add(new MySqlParameter("@data", MySqlDbType.DateTime.ToShortDateString()));


    Sou só uma little padawan que tem sorte de andar com jedis, mas farei o possível por quem precisar :)

    Se precisar: @MayogaX

    Olá Priscila, obrigado mais uma vez por tentar me ajudar =) Thanks a Bunch !!

    Acho que me expressei mal, eu tenho este campo DateTime (Que consta Data/Hora) e eu quero fazer um 'Filtro' de acordo com a DATA (sem hora) digitada no maskedtexbox, saca ? Pensei no like pois vou digitar apenas a DATA, mas eu quero que me retorne TODOS os campos que contenham aquela data, independente de ter hora ou não.

    terça-feira, 25 de setembro de 2012 19:48
  • terça-feira, 25 de setembro de 2012 20:10
    Moderador
  • Olá,

    Talvez este link te ajude em algo:

    http://stackoverflow.com/questions/267721/mysql-strip-time-component-from-datetime


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    Obrigado por me responder, mas eu tenho outros campos, como mostro acima, tentei fazer desta forma e não deu... Eu não quero retorno da DATA, eu quero o retorno de TODOS os campos de acordo com a DATA que eu passar.

    Passarei apenas a data (que ira ser digitada pelo usuário "dd/mm/aaaa"). E quero que ele busque na minha tabela no campo DateTime que contem DATA E HORA.

    Preciso usar algo do tipo LIKE '%' maskedtextbox.text '%'; saca? Quero que independente do fato de eu estar passando apenas data, ele me retorne todos os campos que contenham aquela data mesmo eles contendo HORAS junto.

    Pois fazendo da forma que eu postei anteriormente eu consigo ter retorno. Mas apenas dos campos que contenham SOMENTE DATA (sem conter HORA) e eu preciso que me retorne TODOS...

    • Editado PlayHardGoPro terça-feira, 25 de setembro de 2012 20:23
    terça-feira, 25 de setembro de 2012 20:15
  • Play

    nao sei se isto vai te ajudar, mas é muito semelhante ao que voce procura.

    eu filtro por data normalmente.

     else
                {
                    sql =      "SELECT GasComb,idVeicu,idComb, idMotori, idFornec, kmInfor,  diaAbaste, numeroNota, valor, lts, obs,diaCadas,cadasPor  from tb_Abastecimento where idComb =  '" + CombComboBox.SelectedValue + "'";
                    sql = sql + " where diaAbaste Between " + "'" + string.Format("{0:MM/dd/yyyy}", dtpInicio.Value.Date) + "'";
                    sql = sql + " AND  " + "'" + string.Format("{0:MM/dd/yyyy}", dtpFim.Value.Date) + "'";

    terça-feira, 25 de setembro de 2012 20:42
  • Play

    nao sei se isto vai te ajudar, mas é muito semelhante ao que voce procura.

    eu filtro por data normalmente.

     else
                {
                    sql =      "SELECT GasComb,idVeicu,idComb, idMotori, idFornec, kmInfor,  diaAbaste, numeroNota, valor, lts, obs,diaCadas,cadasPor  from tb_Abastecimento where idComb =  '" + CombComboBox.SelectedValue + "'";
                    sql = sql + " where diaAbaste Between " + "'" + string.Format("{0:MM/dd/yyyy}", dtpInicio.Value.Date) + "'";
                    sql = sql + " AND  " + "'" + string.Format("{0:MM/dd/yyyy}", dtpFim.Value.Date) + "'";

    Obrigado por me responder...

    Perdoe a minha ignorância mas tu podia me explicar seu código ? Não intendi o que seria dtp.Inicio/fim.Value.Date  que você passa como valor ;x e nem aquele "0" em (0:MM/dd/yyyy)";

    terça-feira, 25 de setembro de 2012 20:47
  • Boa noite,

    Porque você formata o campo do banco para só trazer a data e ai pode fazer como esta fazendo?

    Não sei qual é o banco de dados que tais usando mas não é tão complicado assim em MySQL, SQL Server, Oracle ou Firebird.


    Fábio Kiatkowski Engenheiro de Software

    terça-feira, 25 de setembro de 2012 21:55
  • Cara como resposta final para essa sua dúvida, é só formatar como o nosso colega fez mais a cima ai:

    //Aqui definimos a data digitada com o formato do tipo data do SQL
    
    string strDataGigitada = 
    string.Format("{0:yyyy-MM-dd}" , Convert.ToDateTime("25/09/2012 19:36:00"));
    
    //Depois passamos como parametro para o Select que será executado no banco
    
    string strSelect = 
    
    string.Format("SELECT *  FROM Teste WHERE Data='{0}'", strDataGigitada);
    
    
    //Ai é só executar no banco o strSelect

    Atenciosamente,

    Samuel dos Anjos


    Atenciosamente, Samuel dos Anjos


    terça-feira, 25 de setembro de 2012 22:40
  • Boa noite,

    Porque você formata o campo do banco para só trazer a data e ai pode fazer como esta fazendo?

    Não sei qual é o banco de dados que tais usando mas não é tão complicado assim em MySQL, SQL Server, Oracle ou Firebird.


    Fábio Kiatkowski Engenheiro de Software

    Bom dia. È por que eu também preciso da HORA, e eu criei um campo TIME e tentei inserir apenas a hora DateTime.Now.ToShortTimeString(); e passar com este mesmo parameter mas não funcionou =\
    quarta-feira, 26 de setembro de 2012 11:11
  •  --------------------- UPDATE ------------------------------------------

    Boa Tarde pessoa =)

    só vim aqui para avisa-los de que eu consegui resolver o meu problema sem precisar deixar os campos separados (Data em um campo DATE e hora em um campo TIME)...

    Era mais simples do que eu pensava (sempre é... haha)

    Agradeço a boa vontade de todos, mais uma vez mto obrigado !

    quarta-feira, 26 de setembro de 2012 11:14