SQLite查询以获取最接近的日期时间

Mar*_*inD 2 sql sqlite datetime

我正在尝试编写SQLite语句以从用户输入(来自WPF日期选择器)获取最接近的日期时间.我有一个表IRquote(rateId,quoteDateAndTime,quoteValue).

例如,如果用户输入10/01/2000并且数据库仅在08/01/2000,07/01/2000和14/01/2000存储了修复,它将返回08/01/2000,是最接近的日期从2000年1月10日.

当然,我希望它不仅能用于约会,还能用于时间.

我尝试使用此查询,但它返回的行具有最远的日期,而不是最接近的日期:

SELECT quoteValue FROM IRquote 
WHERE rateId = '" + pRefIndexTicker + "'
ORDER BY abs(datetime(quoteDateAndTime) - datetime('" + DateTimeSQLite(pFixingDate) + "')) ASC
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

请注意,我有一个函数DateTimeSQLite来将用户输入转换为正确的格式.

我不明白为什么这不起作用.我怎么能这样做?谢谢你的帮助

Ber*_*nde 6

要获得最接近的日期,您需要使用strftime('%s',datetime) SQLite函数.

使用示例/演示,您将获得与给定日期最接近的日期.
请注意,日期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;
Run Code Online (Sandbox Code Playgroud)

SQL解释:
我们使用它strftime('%s') - strftime('%s')来计算两个日期之间的差异(以秒为单位)(注意:它必须是'%s',而不是'%S').由于这可以是正面的,也可以是负面的,我们还需要使用该abs函数使其全部为正,以确保我们order by和后续limit 1部分的工作正确.

  • @ypercube SQLite 将 DateTime 存储为字符串,因此实际上没有发生转换。SQLite中没有DateTime类型 (2认同)