2010-06-08 5 views
2

Puis-je effectuer des opérations WHERE sur un champ de date calculé?Opérations sur un champ de date calculée

J'ai un champ de recherche, qui a été mal écrit en SQL et malheureusement je ne peux pas le changer. Mais fondamentalement, il stocke les dates comme des caractères tels que "Juillet-2010" ou "Juin-2009" (avec d'autres données non-date). Je veux d'abord extraire les dates (ce que j'ai fait en utilisant un opérateur LIKE), puis extraire les données en fonction d'une plage de dates.

SELECT 
    BusinessUnit, 
    Lookup, 
    ReleaseDate 
FROM 
(
    SELECT TOP 10 
     LookupColumn As Lookup, 
     BU as BusinessUnit, 
     CONVERT(DATETIME, REPLACE(LookupColumn,'-',' ')) as ReleaseDate 
    FROM 
     [dbo].[LookupTable] 
    WHERE 
     LookupColumn LIKE N'%-2010' 
) MyTable 
ORDER BY ReleaseDate 
WHERE ReleaseDate = '2010-02-01' 

Je rencontre des problèmes avec l'opérateur WHERE. Je suppose que la création d'une sous-requête pour encapsuler le champ calculé me ​​permettrait de faire des opérations avec elle, comme par exemple WHERE, mais peut-être que je me trompe. Bottom line est-il possible de faire des opérations sur des champs calculés? MISE À JOUR: en effet, j'ai eu la commande mélangée et en outre l'opérateur LIKE retournait également des valeurs non-date telles que TBD-2010 qui me perturbaient.

+1

De quels "problèmes" avez-vous besoin? –

Répondre

2

Vous avez le tour de la mauvaise façon des clauses et ORDER BYWHERE. Essayez de les changer:

... 
) MyTable 
WHERE ReleaseDate = '2010-02-01' 
ORDER BY ReleaseDate 
1

Vous aurez probablement plus de facilité à encapsuler cette table dans une vue et à interroger la vue. De cette façon, votre vue seule contient la logique pour convertir ce peu d'horreur en une colonne DATETIME normale.

1

De quels "problèmes" souffrez-vous?

Dans votre exemple, vous ne pouvez pas avoir une clause WHERE après une clause ORDER BY ...