如何从特定日期插入的表中获取所有行。

时间:2013-05-22 16:58:36

标签: sql db2 h2

我正在尝试编写一个查询,该查询获取特定日期的表的所有行。

SELECT * FROM MY_TABLE WHERE COLUMN_CONTAINING_DATE='2013-05-07'

但是这不起作用,因为在表格中COLUMN_CONTAINING_DATE包含类似'2013-05-07 00:00:01'等数据。所以,这样可行

SELECT * FROM MY_TABLE WHERE COLUMN_CONTAINING_DATE>='2013-05-07' AND COLUMN_CONTAINING_DATE<'2013-05-08'

然而,我不想选择2,因为这感觉就像一个hacky方式。我宁愿把一个查询说给我一个给定日期的所有行,并且不知道怎么不打扰COLUMN_CONTAINING_DATE中的分钟和小时。

我正在尝试在H2和DB2上运行此查询。

有什么建议吗?

4 个答案:

答案 0 :(得分:3)

你可以这样做:

select *
from MY_Table
where trunc(COLUMN_CONTAINING_DATE) = '2013-05-07';

但是,您描述为“hack”的版本实际上更好。通过在数据周围包装函数,许多SQL优化器将不使用索引。只需直接比较,肯定会使用索引。

答案 1 :(得分:0)

使用类似的东西

SELECT * FROM MY_TABLE WHERE COLUMN_CONTAINING_DATE=DATE('2013-05-07')

答案 2 :(得分:0)

如果您使用DB2 10.1中的Temporal数据管理功能,则可以简化此操作。

了解更多信息: http://www.ibm.com/developerworks/data/library/techarticle/dm-1204db2temporaldata/

答案 3 :(得分:0)

如果您的顾虑与不同的数据类型(列中的时间戳和包含日期的字符串)相关,您可以这样做:

SELECT * FROM MY_TABLE
  WHERE 
        COLUMN_CONTAINING_DATE >= '2013-05-07 00:00:00' 
    and COLUMN_CONTAINING_DATE <  '2013-05-08 00:00:00'

并且我注意where子句的格式,因为如果你必须在两个月后查看你的查询,这将大大提高可读性。只需选择您喜欢的样式,例如&#34; a&lt; = x&lt; B&#34 ;.不幸的是,SQL 之间的不支持此功能。

有人可能会说毫秒仍然缺失,所以完美主义者可能会追加另一个&#34; .0&#34;在时间戳...