2009-06-01 9 views
0

Hai,requête SQL Aide

Tableau Structure

Id No Date  Time 

0001, 01-05-2009, 040000 
0001, 02-05-2009, 020000 
0002, 01-05-2009, 060000 
0002, 01-05-2009, 180000 
temps

et la date est nvarchar

Je veux obtenir les données entre

  • Hier 030001 aujourd'hui 030000
  • Avant-hier 0300001 à hier 030000

J'ai essayé le mentionné ci-dessous requête

Select 
    idno, min (time), max (time) 
from 
    table 
where 
    time between 030001 and 030000 

Rien affiché dans le résultat car il prend le temps d'aujourd'hui 3:00-à-3:01 Exactement j'ai besoin aujourd'hui 03h00 hier 03h01

J'ai besoin de la requête SQL pour la condition ci-dessus

Quelqu'un peut-il m'aider?

Jash.

+2

Pouvez-vous modifier la structure de la table? Stocker la date et l'heure dans nvarchar est un peu bête et rend vraiment difficile à interroger .... aussi, quel système SQL utilisez-vous? –

Répondre

1

Il est difficile de trier ou de filtrer lorsque votre date est au format JJ-MM-AAAA. Dans un tel format, 01-01-2009 vient avant 02-01-2000!

Alors, d'abord convertir votre rendez-vous avec les longues années d'abord, et les courtes dernières secondes:

YYYY-MM-DD HH:MM:SS 

Une requête comme celui-ci peut le faire:

select [id no], 
    substring(date,1,2) + '-' + substring(date,4,2) + '-' + 
    substring(date,7,4) + ' ' + 
    substring(time,1,2) + ':' + substring(time,3,2) + ':' 
    substring(time,5,2) as NormalDate 
from YourTable 

Maintenant, vous pouvez facilement sélectionner tous lignes pour un laps de temps particulier:

select * 
from (
    select [id no], 
     substring(date,1,5) + '-' + substring(date,7,4) + ' ' + 
     substring(time,1,2) + ':' + substring(time,3,2) + ':' 
     substring(time,5,2) as NormalDate 
    from YourTable 
) sub 
where '2009-05-01 03:00:00' < NormalDate 
and NormalDate < '2009-05-02 03:00:00'