Não sei se aqui é o melhor lugar, mas
Tem uma tabela no sql q tem data e o turno(manha, tarde ou noite), só q eu tenho q q fazer uma consulta q ordene pela data e pelo turno. alguém sabe como fazer? só q o campo data tá como date e o turno varchar.
Não sei se aqui é o melhor lugar, mas
Tem uma tabela no sql q tem data e o turno(manha, tarde ou noite), só q eu tenho q q fazer uma consulta q ordene pela data e pelo turno. alguém sabe como fazer? só q o campo data tá como date e o turno varchar.
Por padrão ele ordena em ordem crescente para ordenar de forma descrescente basta adicionar a palavra DESC
[code]select * from tabela order by data, turno DESC[/code]
Por padrão ele ordena em ordem crescente para ordenar de forma descrescente basta adicionar a palavra DESC
você trabalhando com Date no BD e fazendo order by pelo campo data ele já não pega os registro ordenados?
Acho que não entedi direito o que você deseja.
poste mais alguma informação ai pra ver se consigo ajudar em algo.
Consegue me dizer os campos e as tabelas??
xD~~
era o que foi postado acima que você deseja?
vou dar 1 exemplo:
tenho esses 4 registros gravados:
id,nome, data, turno
1, fulano, 04/01/2010,noite
2, ciclano, 04/01/2010, tarde
3, beltrano, 04/01/2010, manha
4, outrano, 05/01/2010, noite
eu queria ordernar pela data e o turno, só q com o turno em 1 ordem específica, 1° manhã, 2° tarde e 3° noite
ae ficaria assim:
3, beltrano, 04/01/2010, manha
2, ciclano, 04/01/2010, tarde
1, fulano, 04/01/2010,noite
4, outrano, 05/01/2010, noite
Ele usa a ordem natural dos dados das colunas.
Você pode tentar o seguinte caso esteja usando oracle
select nome, data, turno, decode(turno, 'manha', 1, 'tarde', 2, 'noite', 3) a from tabela order by a, data
ou pode pesquisar algo parecido no seu banco.
Uma outra alternativa é tentar ordenar isso no java, mas daí fica oneroso para o server
O código abaixo é o que você quer!
[quote=thiago.correa]select * from tabela order by data, turno
Por padrão ele ordena em ordem crescente para ordenar de forma descrescente basta adicionar a palavra DESC
po, eu to usando o sql server, tem algo parecido com o q vc citou acima ou será que funciona lá?
Dá uma conferida na documentação do teu servidor de banco de dados, é bem provavel que sim, só não garanto que seja com o mesmo nome!!!
[quote=Alberes]O código abaixo é o que você quer!
[quote=thiago.correa]select * from tabela order by data, turno
Por padrão ele ordena em ordem crescente para ordenar de forma descrescente basta adicionar a palavra DESC
Alberes, não pq assim o turno não ficaria ordernado por manhã, tarde e noite e sim por ordem alfabética ascendente ou descendente…
Vlw cara, vou dar uma procurada por isso, já é um caminho a se seguir. Obrigado
Consegui, no sql server tem case q funciona semelhante ao decode do oracle. só pra postar a resposta aqui caso alguém no futuro venha precisar vou mostrar como ficou:
select id,nome, data, turno, (case When turno ='Manhã' then 1 When turno ='Tarde' Then 2 When turno ='Noite' then 3) as ordem from tabela order by data asc, ordem asc
Obrigado ae galera do GUJ!
Entendi.
Não tenho mysql para testar, mas você pode fazer algo assim.
SELECT
nome, data, turno, SUBSTRING(a FROM 3)
(select nome, data, turno, decode(turno, '1 manha', 1, '2 tarde', 2, '3 noite', 3) a from tabela order by a, data)
FROM tabela
A minha dúvida é essa função decode, não conheço, mas de qualquer forma tem uma outras funções.
Link com as funções para strings
http://www.tutorialspoint.com/mysql/mysql-string-functions.htm
Segue a query que resolverá o seu problema:
select * from tabela
order by data,case turno when ‘manha’ then 1 when ‘tarde’ then 2 when ‘noite’ then 3 end