Операции с полем вычисляемой даты - PullRequest
2 голосов
/ 08 июня 2010

Могу ли я выполнять ГДЕ операции с вычисляемым полем даты?

У меня есть поле поиска, которое плохо написано на SQL, и, к сожалению, я не могу его изменить. Но в основном он хранит даты в виде символов, таких как «июль-2010» или «июнь-2009» (вместе с другими данными, не относящимися к дате). Сначала я хочу извлечь даты (что я и сделал с помощью оператора LIKE), а затем извлечь данные на основе диапазона дат.

 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'

У меня проблемы с оператором WHERE. Я бы предположил, что создание подзапроса для инкапсуляции вычисляемого поля позволило бы мне выполнять с ним такие операции, как WHERE, но, возможно, я ошибаюсь. Итог можно ли делать операции на вычисляемых полях?

ОБНОВЛЕНИЕ: действительно, я перепутал заказ, и, кроме того, оператор LIKE также возвращал не датированные значения, такие как TBD-2010, которые меня напутали.

Ответы [ 3 ]

2 голосов
/ 08 июня 2010

У вас есть пункты ORDER BY и WHERE в неправильном направленииПопробуйте переключить их:

...
) MyTable
 WHERE ReleaseDate = '2010-02-01'
 ORDER BY ReleaseDate
1 голос
/ 08 июня 2010

Какие у вас "проблемы"?

В вашем примере вы не можете иметь предложение WHERE ПОСЛЕ предложения ORDER BY ...

1 голос
/ 08 июня 2010

Вам, вероятно, будет проще инкапсулировать эту таблицу в представление, а затем запросить представление.Таким образом, только ваше представление содержит логику для преобразования этого кусочка ужаса в обычный столбец DATETIME.

...