Jump to content
diogom

Resultado de query inesperado

Recommended Posts

diogom

Olá,

Tenho uma tabela onde tenho um campo data(varchar) com varias datas. Quando faço para executar esta query Select user, data from fichacli Where user = 'dm' and data between '24/04' and '27/a4', retorna datas que n quero.

tabela fichacli

campo data

24/04/2013

25/04/2013

27/03/2013

30/03/2013

resultado:

campos user data

x 24/04/2013

x 25/04/2013

x 27/03/2013

Não percebo o que estara errado. Se alguem souber, agradecia.

Share this post


Link to post
Share on other sites
Rechousa

Olá,

Não sou especialista em MySQL mas reparei em várias coisas:

- Devias usar um tipo de dados próprio para guardar a data (é muito mais eficiente no tratamento de datas, diz-te se a data é válida ou não, e foi para isso que ele foi criado);

- Talvez tenhas digitado mal, mas no segundo parâmetro do BETWEEN tens lá um caractér 'a' que me parece que está a mais (27/a4)

- Não estás a colocar o ano;

- Pelo facto de teres o campo em varchar, o motor de SGBD compara como texto;


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Share this post


Link to post
Share on other sites
diogom

O 'a' enganei-me ao passar para aqui. Eu não usei o tipo de data "date", porque não põe no formato que quero. d/m/a. Com o ano ou sem o ano, o resultado é o mesmo.

O que quero é procurar só pelo dia e mes.

Share this post


Link to post
Share on other sites
HappyHippyHippo

se queres que a base de dados faça esse tipo de operações, então terás de usar DATE ou TIME ou DATETIME ou TIMESTAMP

se não aparece no formato que pretendes, é problema da tua aplicação e não da base de dados. isto quer dizer que é da tua responsabilidade de alterar o formato de apresentação dos dados


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
nelsonr

Como o Rechousa já disse, as datas não têm nenhum formato especifico quando estão na base de dados (com o campo do tipo data).

Ao serem mostradas é que a aplicação transforma e mostra de acordo com a cultura ou outra configuração que possa existir.

Por isso, sempre que possível usa um dos vários tipo de data.

No entanto, uma forma de dares a volta ao usares datas no formato texto, é guardar usando o ano, mês e dia (ex: 2013/04/24, 2013/05/01).

Isso assim facilita a ordenação e o filtro (mas tens de incluir o ano)

Edited by nelsonr

Share this post


Link to post
Share on other sites
diogom

Como o Rechousa já disse, as datas não têm nenhum formato especifico quando estão na base de dados (com o campo do tipo data).

Ao serem mostradas é que a aplicação transforma e mostra de acordo com a cultura ou outra configuração que possa existir.

Por isso, sempre que possível usa um dos vários tipo de data.

No entanto, uma forma de dares a volta ao usares datas no formato texto, é guardar usando o ano, mês e dia (ex: 2013/04/24, 2013/05/01).

Isso assim facilita a ordenação e o filtro (mas tens de incluir o ano)

Foi o que fiz. Obrg.

Existe maneira de fazer um select só a pesquisar o dia e mes, sem o ano.

ja tentei isto mas não dá.

SELECT datanasc from fichacli where user = '" + userTB.Text + "'and datanasc = '%" + datasistema + "'"; datasistema=(04/30)

Share this post


Link to post
Share on other sites
Rechousa

Experimenta assim (não testei):

SELECT datanasc from fichacli where user = '" + userTB.Text + "' AND DAY(datanasc) = DAY(SYSDATE()) AND MONTH(datanasc) = MONTH(SYSDATE())"

O teu código é vulnerável a SQL Injection. Aconselho vivamente a que não faças concactenação de strings na construção de Query's SQL, usa parâmetros.

Exemplo:

http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Share this post


Link to post
Share on other sites
diogom

Experimenta assim (não testei):

SELECT datanasc from fichacli where user = '" + userTB.Text + "' AND DAY(datanasc) = DAY(SYSDATE()) AND MONTH(datanasc) = MONTH(SYSDATE())"

O teu código é vulnerável a SQL Injection. Aconselho vivamente a que não faças concactenação de strings na construção de Query's SQL, usa parâmetros.

Exemplo:

http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php

Não deu.

Faço o leituta.execurnonquery e na leitura esta isto MySql.Data.MySqlClient.MySqlDataReader

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.