2010-06-08 75 views
2

我可以對計算日期字段執行WHERE操作嗎?計算日期字段上的操作

我有一個查詢字段,它在SQL中寫得很糟,很不幸我無法更改它。但基本上它將日期存儲爲諸如「2010年7月」或「2009年6月」(以及其他非日期數據)等字符。我想首先提取日期(我使用LIKE opertor),然後根據日期範圍提取數據。

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,這些值讓我感到困惑。

+1

你有什麼「問題」? – 2010-06-08 13:12:48

回答

2

你有ORDER BYWHERE條款南轅北轍。嘗試切換它們:

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

您可能更容易在視圖中封裝此表,然後查詢視圖。通過這種方式,您的視圖本身就包含了將這種可怕性轉化爲正常DATETIME列的邏輯。

1

你有什麼「問題」?

在你的榜樣,你不能有一個WHERE子句ORDER BY子句後...