UMA AJUDA COM SELECT BY ORDER "DATA"

1,641 views
Skip to first unread message

hardjunior

unread,
Aug 3, 2012, 9:53:50 AM8/3/12
to go...@googlegroups.com
SFF, Por favor estou com problema o seguinte:
    quero fazer um select qualquer que sua vez seja ordenado pela data.
estou tentando o by order "data" ; mas responde tipo 01/02/2012, 02/03/2012, 03/02/2012. tipo nao ordem o mes junto com o dia, mas somente o dia da data.

Leonardo - Gmail

unread,
Aug 3, 2012, 9:57:09 AM8/3/12
to go...@googlegroups.com, go...@googlegroups.com
Verifique pois em SQL normalmente o formato da data é MM/DD/AAAA. Se for, a ordenação que vc passou esta correta.

Leonardo de Medeiros

94-8113 3664
94-9225 6802
62-8160 8291

Enviado via iPhone
--
Você recebeu esta mensagem porque está inscrito na Lista "GOPHP" em Grupos do Google.
Para Postar: go...@googlegroups.com
Para Sair do Grupo: gophp-un...@googlegroups.com
Link: http://groups.google.com/group/gophp?hl=pt-BR
 
 

Ole Peter Smith

unread,
Aug 3, 2012, 10:17:49 AM8/3/12
to go...@googlegroups.com

eu faria esse na linguagem de programacao, convertindo ddmmyyyy em yyyymmdd e usar sort.

0le

Send via Android

Diego Tolentino

unread,
Aug 3, 2012, 10:24:21 AM8/3/12
to go...@googlegroups.com
acredito que este seu campo no banco deve ser uma string, tente guardar este campo no formato de data mesmo, convertendo pra gravar e de volta quando for ler, ou então use alguma função para formatar este campo usando SUBSTR e fazendo a ordenacao por este alias, mas acredito que a forma mais facil seja transformar este campo em um date no banco mesmo

SELECT 
    concat(SUBSTR('25/02/2012', 7, 4),
            SUBSTR('25/02/2012', 4, 2),
            SUBSTR('25/02/2012', 1, 2)) as teste
order by teste

Diego Tolentino
SENIOR DEVELOPER
Skype: diegotolentino 


Proteja o endereço de seus amigos como estou protegendo o seu. Ao enviar
mensagens para mais de um endereço use SEMPRE o "Cco" (cópia oculta ou "Bcc" (Blind carbon copy)).

Luís Henrique Faria

unread,
Aug 3, 2012, 10:11:44 AM8/3/12
to go...@googlegroups.com
Você está guardando a data no formato correto no banco de dados (tipo date) ?

2012/8/3 Leonardo - Gmail <leonardod...@gmail.com>

karlos augusto

unread,
Aug 3, 2012, 10:30:49 AM8/3/12
to go...@googlegroups.com
O problema de ordenar na linguagem é que o banco é muito mais rapido para ordenar do que o Php.

hardjunior, verifique no banco  como está definido o campo data, existe a função que serve para ser usada em vários bancos TO_DATE('data','dd-mm-yyyy') que você pode usar caso  o formato esteja extrangeiro.

Na minha opinião quanto mais soluções vc aplicar diretamente no banco a performance de sua aplicação será bem melhor.

Em 3 de agosto de 2012 11:17, Ole Peter Smith <ole...@gmail.com> escreveu:

Jonata Weber

unread,
Aug 3, 2012, 10:14:26 AM8/3/12
to go...@googlegroups.com
Se o campo estiver como 'STRING/VARCHAR' ao invés de 'DATE', certamente você terá um problema quanto a isso.

Se for MySQL, acredito que assim vá funcionar:
SELECT * FROM tabela ORDER BY STR_TO_DATE(tabela.data, '%d/%m/%Y') ASC;

Att.,


2012/8/3 Leonardo - Gmail <leonardod...@gmail.com>
Verifique pois em SQL normalmente o formato da data é MM/DD/AAAA. Se for, a ordenação que vc passou esta correta.



--
Jonata Weber
Analista de Sistemas Jr.
Hospital Estadual da Criança
----------------------------------------------------------
Bacharel em Sistemas de Informação - UNIFACS
skype: jonata.weber / msnjon...@gmail.com
(75) 8105-5370 (TIM) / 3022-0600 (Home)


Jonatan Froes

unread,
Aug 3, 2012, 11:11:06 AM8/3/12
to go...@googlegroups.com
ODER BY date(sua_coluna)


--

Ole Peter Smith

unread,
Aug 3, 2012, 12:44:01 PM8/3/12
to go...@googlegroups.com
2012/8/3 karlos augusto <karl...@gmail.com>:
> O problema de ordenar na linguagem é que o banco é muito mais rapido para
> ordenar do que o Php.

concordo, quanto o sql necessaria e ANSI, ou seja convertivel entre
dialetos SQL.

Outra; vejo direto na internet ordenacao alfabetico errado quanto ao
letras acentuados (pondo elas por ultimo). e possivel ordenar estes
correto 'no banco'?

0le
/////
( O O )
=================oOO==(_)==OOo=================
Every day and every hour, I'm Learning more
The more I Learn, the less I Know about before
The Less I know, the more I want to Look around
Diggin' deeper into Higher Ground... UB40
.oooO Oooo.
==================( )=( )=====================
\ ( ) /
\_) (_/
===============================================
Ole Peter Smith, IME, UFG
http://www.mat.ufg.br/docentes/olepeter - ole at mat.ufg.br
===============================================
Life sure is a Mystery to be Lived
Not a Problem to be Solved
===============================================

Ole Peter Smith

unread,
Aug 3, 2012, 12:46:59 PM8/3/12
to go...@googlegroups.com
estava pensando aqui, se pra eficiencia mesmo, nao seria otimal salvar
'MTime' - e implementar mtime2date e date2mtime, simplesmente
ignorando hh:ss. Assim pode fazer sort numerico, que devia ser muito
mais rapido!?

0le

2012/8/3 Ole Peter Smith <ole...@gmail.com>:

karlos augusto

unread,
Aug 3, 2012, 2:20:24 PM8/3/12
to go...@googlegroups.com
Bom, no caso do oracle creio que não seria viável. Ele tem em sua arquitetura uma indexação especial para datas.  Não sei se outros bancos também tem...
Curiosidade... Esta indexação funciona para datas de 4712a.C a 31 de dezembro de 4712 d.C.  Sendo assim podemos usar Oracle por muito tempo.rsrsrs. Será que Moisés usou Oracle???

hardjunior

unread,
Aug 9, 2012, 11:14:14 AM8/9/12
to go...@googlegroups.com
a resposta do  "Jônatan Fróes" funciona porem como uso a coluna como string e com outros valores acho que vou ter que usar este metodo(MTime' - e implementar mtime2date e date2mtime, simplesmente ignorando hh:ss.). vou estuda-lo depois respondo mas desde ja obrigado a todos.

Jonatan Froes

unread,
Aug 9, 2012, 12:44:17 PM8/9/12
to go...@googlegroups.com
Ou então usar STR_TO_DATE(campoDataTexto, '%d/%m/%Y')

Em 9 de agosto de 2012 12:14, hardjunior <hardj...@gmail.com> escreveu:
a resposta do  "Jônatan Fróes" funciona porem como uso a coluna como string e com outros valores acho que vou ter que usar este metodo(MTime' - e implementar mtime2date e date2mtime, simplesmente ignorando hh:ss.). vou estuda-lo depois respondo mas desde ja obrigado a todos.

--

Dyego Fernandes de Sousa

unread,
Aug 10, 2012, 6:16:56 AM8/10/12
to go...@googlegroups.com
Cara, faz assim:

SELECT campoDataTexto
FROM sua_tabela
WHERE <todos seus where>
ORDER BY STR_TO_DATE(campoDataTexto, '%d/%m/%Y') 

Desta forma você:
1 - Retorna seu campo para a aplicação no formato desejado (campoDataTexto)
2 - Ordena seus dados como data (STR_TO_DATE(...))

--
Dyego Fernandes de Sousa
DBA - SQL Server / OpenEdge Progress
PepsiCo

Ole Peter Smith

unread,
Aug 10, 2012, 6:40:47 AM8/10/12
to go...@googlegroups.com

mas ae nao sai de ordem cronologico... pra isso precisa yyyy/mm/dd, nao?

0le

Send via Android

--

Dyego Fernandes de Sousa

unread,
Aug 11, 2012, 5:28:06 PM8/11/12
to go...@googlegroups.com
Ole, o tipo data é ordenado cronologicamente, se usado da forma que passei.

O Problema que o colega está enfrentando é que o campo dele é Texto, que sendo assim, é ordenado alfabeticamente.

--
Dyego Fernandes de Sousa
DBA SQL Server / OpenEdge - PepsiCo
Reply all
Reply to author
Forward
0 new messages