2009-10-19 7 views
0

Je souhaite extraire des données de la base de données où le champ "date_fin" est inférieur à la date du jour et où end_date n'est pas égal à null; comment ferais-je cela? Je me suis dit la deuxième partie à .. J'ai du mal avec la première partieQuestion de requête SQL Oracle

select * 
from table 
where to_char(end_date) IS NOT null 
+2

Vous n'avez pas besoin de perdre du temps à convertir la date de fin en chaîne de caractères pour la tester pour la nullité; utilisez simplement "WHERE end_date IS NOT NULL". –

Répondre

7

Essayez cette

... 
    Where end_ date is not null and 
     And end_date < sysdate 

Et, en fait, je pense que vous pouvez même pas besoin de la première partie, comme si date_fin est nulle , il ne sera certainement pas après la date d'aujourd'hui, donc essayer par lui-même:

Where end_date < sysdate 

EDIT: NOTEs

  1. Cela vous donnera tous les records que a un date_fin avant la date du système et l'heure, y compris ceux dont les valeurs de date_fin plus tôt aujourd'hui. Si vous ne souhaitez que ceux qui ont end_Dates jusqu'à et pas y compris minuit hier soir, alors vous avez besoin remplacer par une expression « SYSDATE » pour la valeur temporelle Date pour minuit la nuit dernière ..

    Où date_fin < trunc (sysdate)

  2. sysdate est oracle syntaxe spécifique pour renvoyer la date actuelle du système et le temps. (dans SQL Server, par exemple, il s'agit d'une fonction appelée getDate() La syntaxe ANSI-Standard pour cette fonctionnalité (qui fonctionne à la fois dans Oracle et SQL Server, et devrait fonctionner dans n'importe quelle base de données ANSI) est . CURRENT_TIMESTAMP

+1

+1: vous n'avez pas besoin de la partie "not null" (puisqu'une date NULL ne serait pas "less than sysdate") –

+0

Grande explication tnx un paquet –

0

pour vous montrer un peu plus sur la façon d'utiliser les dates dans Oracle vérifier cela:

Sélectionne la date et supprime 30 minutes de là où check_date est déclarée comme un horodatage

select current_timestamp + interval '-30' minute into check_date from dual; 

Sélectionne tout de table où date_fin est non nul et surtout maintenant - 30 minutes

select * from table 
where to_char(end_date) is not null and end_date < check_date; 
0
select * from table where end_date < CURRENT_DATE and end_date IS NOT null 
0

select * from table où to_char (date_fin, 'JJ-MM-AAAA) est non null et end_date < sysdate;