我正在尝试编写 SQLite 语句以从用户输入(来自 WPF 日期选择器)中获取最接近的日期时间。我有一个表 IRquote(rateId、quoteDateAndTime、quoteValue)。
例如,如果用户输入 10/01/2000 并且数据库只存储了 08/01/2000、07/01/2000 和 14/01/2000 的修复,它将返回 08/01/2000,这是最接近的日期为 10/01/2000。
当然,我希望它不仅适用于日期,还适用于时间。
我尝试使用此查询,但它返回日期最远的行,而不是最近的行:
SELECT quoteValue FROM IRquote
WHERE rateId = '" + pRefIndexTicker + "'
ORDER BY abs(datetime(quoteDateAndTime) - datetime('" + DateTimeSQLite(pFixingDate) + "')) ASC
LIMIT 1;
请注意,我有一个函数 DateTimeSQLite 可以将用户输入转换为正确的格式。
我不明白为什么这不起作用。
我怎么能做到?谢谢你的帮助
最佳答案
要获得最近的日期,您需要使用 strftime('%s', datetime) SQLite 函数。
与 this示例/演示,您将获得最接近给定日期的日期。
注意日期2015-06-25 10:00:00
是用户选择的输入日期时间。
select t.ID, t.Price, t.PriceDate,
abs(strftime('%s','2015-06-25 10:00:00') - strftime('%s', t.PriceDate)) as 'ClosestDate'
from Test t
order by abs(strftime('%s','2015-06-25 10:00:00') - strftime('%s', PriceDate))
limit 1;
SQL解释:
我们使用
strftime('%s') - strftime('%s')
计算两个日期之间的差异(以秒为单位)(注意:它必须是“%s”,而不是“%S”)。由于这可以是正数或负数,我们还需要使用 abs
功能使一切积极确保我们的order by
及后续 limit 1
部分工作正常。
关于SQLite 查询以获取最近的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31031561/