Sql 为什么将LIKE与时间戳一起使用在DB2中不起作用

Sql 为什么将LIKE与时间戳一起使用在DB2中不起作用,sql,database,select,db2,Sql,Database,Select,Db2,我在DB2中使用LIKE结构时遇到问题: 例如: select * from TEST where TIME LIKE '2012-03-04-%' 仅供参考时间是时间戳数据类型 为什么将LIKE与时间戳一起使用不起作用 附加信息:我想从用户在select语句中提供的一天中提取数据。LIKE用于字符串char、varchar数据类型。使用'2012-03-04'和'2012-03-04 23:59:59.998'之间的时间。仅扩展@mortb的答案,我会使用介于或之间 使用类型转换或类似方法进

我在DB2中使用LIKE结构时遇到问题: 例如:

select * from TEST where TIME LIKE '2012-03-04-%'
仅供参考时间是时间戳数据类型

为什么将LIKE与时间戳一起使用不起作用


附加信息:我想从用户在select语句中提供的一天中提取数据。

LIKE用于字符串char、varchar数据类型。使用'2012-03-04'和'2012-03-04 23:59:59.998'之间的时间。

仅扩展@mortb的答案,我会使用介于或之间

使用类型转换或类似方法进行比较的好处是,如果有一个及时索引,则由于类型转换,它将无法使用。

您可以这样使用

where time between
    to_date('2016-06-17 00:00:00', 'yyyy-mm-dd HH24:MI:SS') and
    to_date('2016-06-18 00:00:00', 'yyyy-mm-dd HH24:MI:SS'

您的提案包括2012-03-05的1秒,这是不可能的,可能在“2012-03-04”和“2012-04-04 23:59:59.998”之间的时间会更好?@mortb:不,正确的详细答案是beny23提供的答案。对于离散值,介于两者之间可以。但是,对于连续值,请使用>=和@mortb-这不是很优雅,而是精确。中间将有边界条件错误,因为它包含后续范围的单个点。即使您在ValueA和ValueB之间使用atinBit,您仍然需要确保减去的TinyBit确实是尽可能小的量。对于不可能的浮动,不同的日期/时间数据类型具有不同的精度,这都是隐藏错误边界的一个处方。因为时间戳不是字符串?如果你真的想把它们当作字符串,把它们转换成字符串,并指定你想要的格式。但是对于这种类型的查询,不要将时间戳强制转换为其他类型,而是以本机方式使用它-有大量函数和构造用于以本机方式处理此数据类型。不要把它们当作字符串来对待。+1:用于不使用带连续值的BETWEEN。用于不在函数中隐藏搜索字段。以及不使用字符串操作来处理时间戳。为什么人们认为一切都是一根绳子!?我猜,当他们在日期周围加上引号时,开始出现混乱。为access数据库编写SQL时,可以将日期用2012-04-04括起来,而不是用常规字符串文字。这似乎更为明确。@mortb-Dates周围没有引号。在查询中有两个字符串常量。由于时间戳>=字符串不可能,因此需要将一种或其他数据类型隐式转换为另一种。根据数据类型的精确顺序,字符串隐式转换为时间戳。就像您自己使用了强制转换函数一样。
where time between
    to_date('2016-06-17 00:00:00', 'yyyy-mm-dd HH24:MI:SS') and
    to_date('2016-06-18 00:00:00', 'yyyy-mm-dd HH24:MI:SS'