2017-10-14 17 views
0

J'utilise la base de données Oracle. Vous trouverez ci-dessous les détails de la feuille de temps de l'équipement, qui commence toujours du matin à 7h00 et se termine le jour suivant à 7h00 (total 24 heures). J'ai besoin d'un rapport de la même manière avec la date ascendante et le temps de 7h00 à 7h00. S'il vous plaît conseiller sur même.Oracle Data Trier par date et heure

WorkDate est le type de date et de repos deux colonnes sont de type varchar2

CREATE TABLE TT 
(
WorkDate DATE, 
FromTime VARCHAR2(100 BYTE), 
ToTime VARCHAR2(100 BYTE) 

) 

Work date From To 
8/8/2017 7:00 7:25 
8/8/2017 7:25 12:35 
8/8/2017 12:35 21:55 
8/8/2017 21:55 1:30 
8/8/2017 1:30 7:00 
8/9/2017 7:00 7:25 
8/9/2017 7:25 12:35 
8/9/2017 12:35 21:55 
8/9/2017 21:55 1:30 
8/9/2017 1:30 7:00 
+0

De quel (s) type (s) ces colonnes sont-elles? Pouvez-vous partager le DDL de votre table? – Mureinik

+0

WorkDate est le type Date et le reste est varchar2 – Rakesh

+0

Pourquoi avez-vous balisé votre question avec la balise Microsoft SQL Server si vous utilisez Oracle? –

Répondre

2

Eh bien, le seul problème est que 7:25 vient après 12:35 dans l'alphabet. Vous avez besoin de 07:25 à la place. Utilisez LPAD pour cela:

select * 
from mytable 
order by workdate, lpad(fromtime, 5, '0'); 
1

concaténer la date avec le de temps, puis jeté à une date pour trier le jeu de résultats.

select * from tt 
order by to_date(to_char(work_date, 'mm/dd/yyyy') || ' ' || from_date, 'mm/dd/yyyy hh24:mi') 
/

La chose la plus facile aurait été de stocker FROM et TO comme datetimes mais sans doute il y a de bonnes raisons pour lesquelles votre application a besoin de faire des choses à la dure.