我有SQL表在SQL server 2008,我想获得最新的记录,这取决于它的日期。
我已经编写了一个查询,如下
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条记录,但它没有返回任何东西,我应该在查询中更改什么?
发布于 2013-01-31 15:16:42
因为表中的数据不仅包含日期,还包含时间
SELECT TOP 1 *
FROM ProductPrice
WHERE ProductID = 1698
AND CAST(EffectiveFrom AS date) <= '1/31/2013'
ORDER BY EffectiveFrom DESC或
SELECT TOP 1 *
FROM ProductPrice
WHERE ProductID = 1698
AND EffectiveFrom <= DATEADD(SECOND, 86399, '1/31/2013')
ORDER BY EffectiveFrom DESC 发布于 2013-01-31 15:15:44
关键是你的约会是一个日期时间...除非您通过cast/convert删除时间戳,或者更改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 发布于 2013-01-31 15:17:27
您需要将查询转换为类似以下内容:
SELECT TOP 1 *
FROM ProductPrice
WHERE ProductID = 1698
AND CONVERT(DATE,EffectiveFrom) <= '1/31/2013'
ORDER BY EffectiveFrom DESC https://stackoverflow.com/questions/14620319
复制相似问题