我可以对计算的日期字段执行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,这些都让我感到困惑。
答案 0 :(得分:2)
你有ORDER BY
和WHERE
条款错误的方式。尝试切换它们:
...
) MyTable
WHERE ReleaseDate = '2010-02-01'
ORDER BY ReleaseDate
答案 1 :(得分:1)
您可能更容易在视图中封装此表,然后查询视图。这样,您的视图就会包含将这一点可怕性转换为普通DATETIME
列的逻辑。
答案 2 :(得分:1)
你有什么“问题”?
在您的示例中,在ORDER BY子句之后不能有WHERE子句...