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

标签 sql sqlite datetime

我正在尝试编写 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/

相关文章:

php - 在 PostgreSQL 中使用 INTERVAL 添加小时日期/时间

javascript - 使用 TYPEORM 进行多重 JOIN

mysql - MYSQL 中的 COUNT 查询

sql - 如何比较 SQL Server 中的时间?

sqlite - SQLite 中一个查询中的多个 Select 语句

mysql - 在 MySQL 中运行日期总和

php - 如何使用 SELECT 通过 IN 和 EQUAL 命令获取行?

.net - 使用增强的查询语法构建 System.Data.SQLite

sqlalchemy 使用 json_set 更新特定的 JSON 字段

c# - 强制 DateTime 变量仅显示日期而不转换 ToString()