我在SQL Server 2008中有SQL表,我希望得到最新的记录,这取决于它的日期。
我写了一个查询
SELECT TOP 1 *
FROM ProductPrice
WHERE ProductID = 1698
AND EffectiveFrom <= '1/31/2013'
ORDER BY EffectiveFrom DESC
并且在数据库中有一条记录,其中包含日期2013-01-31 12:12:49.000
现在我期待上面的查询将返回1条记录,但它没有返回任何内容 我应该在查询中更改什么?
答案 0 :(得分:1)
关键是您的日期是日期时间...除非您通过强制转换/转换删除时间戳,或更改您的where子句。 2013-01-01 HH:MM:SS
始终为> 01/01/2013
。
SELECT TOP 1 *
FROM ProductPrice
WHERE ProductID = 1698
AND CONVERT(CHAR(8), EffectiveFrom, 112) <= '20130101'
ORDER BY EffectiveFrom DESC
答案 1 :(得分:1)
因为表格中的数据不仅包含日期,还包含时间
SELECT TOP 1 *
FROM ProductPrice
WHERE ProductID = 1698
AND CAST(EffectiveFrom AS date) <= '1/31/2013'
ORDER BY EffectiveFrom DESC
OR
SELECT TOP 1 *
FROM ProductPrice
WHERE ProductID = 1698
AND EffectiveFrom <= DATEADD(SECOND, 86399, '1/31/2013')
ORDER BY EffectiveFrom DESC
答案 2 :(得分:0)
问题是您将'2013年1月31日00:00'与'2013年1月31日12:12'进行比较 - 它低于该值。您需要将查询转换为:
SELECT TOP 1 *
FROM ProductPrice
WHERE ProductID = 1698
AND CONVERT(DATE,EffectiveFrom) <= '1/31/2013'
ORDER BY EffectiveFrom DESC
答案 3 :(得分:0)
请尝试:
SELECT TOP 1 *
FROM ProductPrice
WHERE ProductID = 1698
AND EffectiveFrom <= (CONVERT(DATETIME, '1/31/2013') + 1)
ORDER BY EffectiveFrom DESC
未选中becoz日期时间值2013-01-31 12:12:49.000
大于1/31/2013
。