2

我可以对计算的日期字段进行 WHERE 操作吗?

我有一个查找字段,它在 SQL 中写得很糟糕,不幸的是我无法更改它。但基本上它将日期存储为字符,例如“2010 年 7 月”或“2009 年 6 月”(以及其他非日期数据)。我想先提取日期(我使用 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,这让我很困惑。

4

3 回答 3

2

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

...
) MyTable
 WHERE ReleaseDate = '2010-02-01'
 ORDER BY ReleaseDate
于 2010-06-08T13:15:07.427 回答
1

您可能更容易将此表封装在视图中,然后查询该视图。这样一来,您的视图本身就包含将这种糟糕的部分转换为普通DATETIME列的逻辑。

于 2010-06-08T13:13:05.330 回答
1

你有什么“问题”?

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

于 2010-06-08T13:13:37.757 回答