Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/09/2011, 14h19   #1
Membre à l'essai
 
Inscription : septembre 2005
Messages : 110
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 110
Points : 22
Points : 22
Par défaut Problème pour évaluer un alias avec DATEDIFF

Bonjour,
j'ai un souci, je souhaite ne faire remonter que les lignes d'une table dont un champ contenant une date qui doit être antérieure de 3 ans ou plus comparé à la date du jour.

J'ai essayé ceci mais cela me remonte une erreur :

Code :
1
2
3
SELECT     ID, DATEDIFF(year, DateSaisie, '2011-09-14 00:00:00') AS NbYear
FROM         MaTable
WHERE     (NbYear>= 3)
Citation:
Erreur Sql : Nom de colonne invalide 'NbYear'

A priori il ne me reconnait pas l'alias NbYear que je déclare pourtant dans ma requête.

Pouvez-vous m'aider s'il vous plait ?

Merci par avance.
Stephane_br est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 14h21   #2
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projets Générix
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
Les alias de colonne ne peuvent être utilisés qu'en dehors de la requête, ou dans la clause order by.

Il faut donc remettre toute ton évaluation :

Code :
1
2
3
4
 
SELECT     ID, DATEDIFF(year, DateSaisie, '2011-09-14 00:00:00') AS NbYear
FROM         MaTable
WHERE     (DATEDIFF(year, DateSaisie, '2011-09-14 00:00:00')>= 3)
Ne t'inquiète pas, le SGBD n'est pas stupide, et comprend qu'il s'agit de la même chose : il ne l'avaluera en réalité qu'une seule fois.
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 14h24   #3
Membre à l'essai
 
Inscription : septembre 2005
Messages : 110
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 110
Points : 22
Points : 22
Super !

En fait, le premier n'est donc pas nécessaire à ce que je constate grâce à ta réponse. Sauf si bien sûr je souhaite faire remonter le nombre d'années évalué.

Et bien merci beaucoup !!
ça fonctionne nickel.

Merci encore.
Stephane_br est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 15h08   #4
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 773
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 773
Points : 1 837
Points : 1 837
Attention, comme cela vous perdez tout l’intérêt d'un index potentiel sur votre colonne...
Utilisez plutôt
Code :
1
2
3
SELECT     ID, DATEDIFF(year, DateSaisie, '2011-09-14 00:00:00') AS NbYear
FROM         MaTable
WHERE     DateSaisie <= DATEADD(year, -3, getdate())
__________________
Alexandre Chemla - Consultant MS BI chez Masao
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h49.


 
 
 
 
Partenaires

Hébergement Web