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

Sql 如何从插入特定日期的表中获取所有行。,sql,db2,h2,Sql,Db2,H2,我正在尝试编写一个查询,以获取特定日期表中的所有行 SELECT * FROM MY_TABLE WHERE COLUMN_CONTAINING_DATE='2013-05-07' 但是,这不起作用,因为在表中,包含日期的列包含“2013-05-07 00:00:01”等数据。因此,这将起作用 SELECT * FROM MY_TABLE WHERE COLUMN_CONTAINING_DATE>='2013-05-07' AND COLUMN_CONTAINING_DATE<'2

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

SELECT * FROM MY_TABLE WHERE COLUMN_CONTAINING_DATE='2013-05-07'
但是,这不起作用,因为在表中,包含日期的列包含“2013-05-07 00:00:01”等数据。因此,这将起作用

SELECT * FROM MY_TABLE WHERE COLUMN_CONTAINING_DATE>='2013-05-07' AND COLUMN_CONTAINING_DATE<'2013-05-08'
然而,我不想选择第二种方式,因为这感觉像是一种令人讨厌的方式。我宁愿放一个查询,告诉我一个给定日期的所有行,而不必担心包含日期的列中的分钟和小时

我试图在H2和DB2上运行这个查询

有什么建议吗

您可以执行以下操作:

select *
from MY_Table
where trunc(COLUMN_CONTAINING_DATE) = '2013-05-07';
然而,你描述为黑客的版本实际上更好。通过围绕数据包装函数,许多SQL优化器将不使用索引。只要直接比较,就一定会使用索引。

您可以:

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

然而,你描述为黑客的版本实际上更好。通过围绕数据包装函数,许多SQL优化器将不使用索引。只要进行直接比较,就一定会使用索引。

使用类似的方法

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

用这样的东西

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

如果使用DB210.1中的时态数据管理功能,则可以简化这一过程

有关更多信息:

如果使用DB210.1中的时态数据管理功能,则可以简化这一过程

有关更多信息:

如果您关心的问题与列中的不同数据类型时间戳以及包含日期的字符串有关,则可以执行以下操作:

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子句的格式,因为如果两个月后必须查看查询,这将大大提高可读性。只需为范围选择您喜欢的样式,如,如果您的关注点与列中的不同数据类型时间戳以及包含日期的字符串相关,则可以执行以下操作:

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子句的格式,因为如果两个月后必须查看查询,这将大大提高可读性。只需为范围选择一种您喜欢的样式,如刚刚在H2上运行并获得>函数TRUNC not found;SQL语句:@partha。坚持你的黑客版本。有经验的SQLER知道这是最好的方法,因为使用了索引;SQL语句:@partha。坚持你的黑客版本。有经验的SQLER知道这是最好的方法,因为使用了索引。应该注意的是,选项2是可以使用SARG的,并且比在Where子句中使用函数性能更好。应该注意的是,选项2是可以使用SARG的,并且比在Where子句中使用函数性能更好。嗯,否。如果看起来包含日期的列是时间戳类型,则调用日期“2013-05-07”的结果将自动转换为时间戳,并导致“2013-05-07 00:00:00.000000”-原因是引擎不必转换表中的每一行以获得结果!嗯,不是。如果看起来包含日期的列是时间戳类型,那么调用日期“2013-05-07”的结果将自动转换为时间戳,并导致“2013-05-07 00:00:00.000000”-原因是引擎不必转换表中的每一行来获得结果!