Usuário com melhor resposta
Query SELECT usando LIKE e parameter

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
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 !
- Editado PlayHardGoPro quarta-feira, 26 de setembro de 2012 19:56
- Marcado como Resposta Harley AraujoModerator quinta-feira, 27 de setembro de 2012 12:19
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 -
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: @MayogaXOlá 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.
-
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 -
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: @andrealveslimaObrigado 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
-
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) + "'";
-
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)";
-
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
-
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
- Editado Samuel Rodrigues dos Anjos terça-feira, 25 de setembro de 2012 22:41
- Sugerido como Resposta Samuel Rodrigues dos Anjos terça-feira, 25 de setembro de 2012 22:42
-
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
-
--------------------- 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 !
- Editado PlayHardGoPro quarta-feira, 26 de setembro de 2012 19:56
- Marcado como Resposta Harley AraujoModerator quinta-feira, 27 de setembro de 2012 12:19