Bah…to com um probleminha…me ajudem!
Tenho um banco de dados e uma tabela aluno.
Nesta tabela tenho um atributo data_nascimento, que declarei como uma String. Só que agora to precisando ordenar uma consulta SQL pela data de nascimento e o ORDER BY não tá funcionando direito…o que fazer?!
Posta teu código aqui.
Qual o banco vc está usando?
Se o seu banco suportar a função substring, tente:
select data_nascimento,substring(data_nascimento,07,04)+substring(data_nascimento,04,02)+substring(data_nascimento,01,02)
order by 2
Obs: estou supondo a data no formato: dd/mm/aaaa
Veja se seu banco permite a utilização de alguma função p/ formatação da data.
[color=“red”]Ex.: No Oracle a função é o TO_DATE[/color]
T+.
o Banco é o Mysql…
Eu acho que eu poderia utilizar isso MHudson, porém nos dias antes de 10, eu ratiei e coloquei por exemplo 1/10/2004, e deveria ser 01/10/2004. Em 1º lugar eu deveria ajeitar isso. Mas como?
E tipo, este teu SQL não ta funcionando muito bem, pois fiz alguns testes aqui e não funcionou.
Olá!
No MySQL vc tem a função DATE_FORMAT() que permite a formatação de datas. Tem um manual com a sintaxe da função no site do MySQL, não lembro muito bem como funciona, mas sei que vc pode passar parametros que lhe permite disponibilizar a data da forma que vc quiser!
Abraços.
Não cara…vocês não estão me entendendo!
Meu banco já está povoado, porém todas as datas estão em formato String. Ex: 12/05/2004…se eu der um “ALTER TABLE tal MODIFY data DATE” por exemplo, essas datas que já casdastrei vão tornar-se 0000-00-00. E isso não pode ocorrer!
E dai? Como que posso resolver isso? Talvez nem precise tranformar em DATE, pode ser que há um SQL que coloque as datas em ordem mesmo sendo Strings. Eu não sei =(
mdtorbis,
O que na verdade estamos lhe dizendo é que você pode colocar no seu select a função [color=“red”]DATE_FORMAT() [/color]e validar o resultado como sendo data e não dar um ALTER TABLE na tabela.
T+.
Sim Sim…eu entendi!
Mas quero saber se eu posso dar um SELECT DATA_FORMAT sobre um String! E como fazer isso?
Não conheço muito o MySQL mas tente desta forma:
SELECT DATE_FORMAT(NOME_CAMPO, 'DD/MM/YYYY')
FROM NOME_TABELA
Faça um teste e nos retorne.
T+.
tenta isto!
order by to_date(nome do campo,‘dd/mm/yyyy’)
Valeu pela ajuda gurizada, mas:
dougnard, desta forma que tu fez, o mysql indica erro na sintaxe;
Green_Beret, desta forma, os valores dos campos retornam todos como null;
Continuem dando dicas ai por favor =)
Olá de novo!
Pelo q eu entendi, vc colocou a sua string de data no seguinte formato dd/mm/aaaa, porém o MySQL tem como padrão aaaa-mm-dd.
Então eu te indico esse link: http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html, pois nele está todas as formas de como vc pode usar o DATE_FORMAT().
Leia a tabela de formatos q ela irá te ajudar…
Espero ter ajudado
[]'s
se vc seleciona o date_format do campo string da tabela, o q ocorre?
Ae gurizada! Valeu pelas dicas aqui, mas já consegui fazer…
Obrigado!
Oi mdtorbis !!
Posta a solução que encontrou dizendo o que fez ou enviando o código… Assim ajuda quem pode ter este problema também… blz?
Bem…primeiro criei uma nova coluna na tabela, para poder migrar os dados:
ALTER TABLE aluno ADD nascimento DATE;
Depois tranferi os dados:
UPDATE aluno SET nascimento = CONCAT(SUBSTRING(data_nascimento,7,4),'-',
SUBSTRING(data_nascimento,4,2),'-',
SUBSTRING(data_nascimento,1,2));
E por último apaguei a antiga coluna (data_nascimento), que está em formato String.
ALTER TABLE aluno DROP data_nascimento;
Feito?![/code]
Você acabou tendo que mudar o atributo mesmo.
Será que não tinha outra alternativa?
T+.
Mas puxa…tu quer algo + simples que isso?