计算日期字段上的操作

时间:2010-06-08 13:09:20

标签: sql sql-server tsql calculated-columns

我可以对计算的日期字段执行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,这些都让我感到困惑。

3 个答案:

答案 0 :(得分:2)

你有ORDER BYWHERE条款错误的方式。尝试切换它们:

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

答案 1 :(得分:1)

您可能更容易在视图中封装此表,然后查询视图。这样,您的视图就会包含将这一点可怕性转换为普通DATETIME列的逻辑。

答案 2 :(得分:1)

你有什么“问题”?

在您的示例中,在ORDER BY子句之后不能有WHERE子句...