从SQLite中的datetime字段中选择特定日期

时间:2019-01-26 12:11:40

标签: sql sqlite datetime

我在表中有以下记录,第3列是sqlite中的Datetime类型。

sqlite> .schema candlestick
CREATE TABLE "Candlestick" (
  "id" INTEGER PRIMARY KEY AUTOINCREMENT,
  "timeframe" TEXT NOT NULL,
  "timestamp" DATETIME NOT NULL,
  "open" DECIMAL(12, 6) NOT NULL,
  "high" DECIMAL(12, 6) NOT NULL,
  "low" DECIMAL(12, 6) NOT NULL,
  "close" DECIMAL(12, 6) NOT NULL,
  "volume" DECIMAL(12, 6) NOT NULL
);

sqlite> select * from candlestick limit 10;
3668401|Europe/Berlin|1999-12-14 08:02:00+01:00|6183|6183|6183|6183|1
3668402|Europe/Berlin|1999-12-14 08:03:00+01:00|6180.5|6183|6180.5|6181|133
3668403|Europe/Berlin|1999-12-14 08:04:00+01:00|6181.5|6187.5|6181.5|6187.5|55
3668404|Europe/Berlin|1999-12-14 08:05:00+01:00|6186|6186|6184.5|6185|166
3668405|Europe/Berlin|1999-12-14 08:06:00+01:00|6182|6184.5|6180.5|6181|31
3668406|Europe/Berlin|1999-12-14 08:07:00+01:00|6181|6181|6175.5|6176|62
3668407|Europe/Berlin|1999-12-14 08:10:00+01:00|6174.5|6174.5|6174.5|6174.5|2
3668408|Europe/Berlin|1999-12-14 08:11:00+01:00|6176.5|6177|6176|6177|7
3668409|Europe/Berlin|1999-12-14 08:13:00+01:00|6174|6174|6174|6174|23
3668410|Europe/Berlin|1999-12-14 08:15:00+01:00|6174|6174|6173|6173|133

如何从所有寄存器中选择一个给定的日期(例如1999-12-15)?即无论何时,所有属于该日的寄存器。

2 个答案:

答案 0 :(得分:2)

一种简单的方法是使用不平等:

List<DataResource> myData = makeData();
JRBeanCollectionDataSource tableDataSource = new JRBeanCollectionDataSource(myData);
Map<String, Object> localParameters = new HashMap<>();
localParameters.put("tableDataSource", tableDataSource);
JasperPrint fillReport = JasperFillManager.fillReport(jasperReport, localParameters,new JREmptyDataSource());
JasperExportManager.exportReportToPdfStream(fillReport, output);

此公式允许SQLite使用索引来检索值-如果有合适的索引可用。

SQLite还具有where timestamp >= '1999-12-15' and timestamp < '1999-12-16' 函数(实际上是所有SQLite日期/时间函数的基础date())。所以你也可以这样写:

strftime()

答案 1 :(得分:1)

SQLite
中,"timestamp"列的数据类型实际上是TEXT 因此您可以使用substr()函数仅提取日期部分:

select * from candlestick
where substr(timestamp, 1, 10) = '1999-12-15'

您可以使用like运算符获得相同的结果:

select * from candlestick
where timestamp like '1999-12-15%'

请参阅此link,以获取有关 SQLite 数据类型的更多信息