0

我有一个 Exasol 数据表,其中有一列如下所示:

2016-10-25 08:01:36.0    
2016-10-25 08:30:09.0    
2016-10-25 09:00:15.0    
2016-10-26 08:02:38.0    
2016-10-26 10:00:44.0    
2016-10-27 10:00:44.0

该列的数据类型是 TIMESTAMP。现在我想声明一个 SQL 查询,显示 TIME 在 12:00:00 之前的所有行。无论是什么日期(只有时间很重要),并将它们与 12:00:00 之后的日期分开。(如果我什至可以说“8 到 12 之间”和“12 到 18”之类的话,那就太好了)。

像这样的陈述:

SELECT * FROM MySCHEMA.MyTable WHERE entryTime < '%12:00:00.%';
SELECT * FROM MySCHEMA.MyTable WHERE entryTime BETWEEN '%08:00:00.%' AND '%12:00:00.%';

不工作。我收到错误消息:

'数据异常 - YYYY 格式标记的值无效;值:'%12:00:00.%' 格式:'YYYY-MM-DD HH24:MI:SS.FF6'

那么有没有办法解决这个问题,所以我可以选择一个时间段,不管它是什么日期?

4

2 回答 2

0

Exasol 的 SELECT 语句必须如下所示:

SELECT * FROM MySCHEMA.MyTable WHERE EXTRACT(HOUR FROM entryTime ) BETWEEN 8 and 10;

这相当于 CAST(...) 语句。

因此,另一个存在第二个 WHERE 子句的示例可能如下所示:

SELECT * FROM MySCHEMA.MyTable WHERE myNames LIKE 'Sam%' AND EXTRACT(HOUR FROM entryTime ) BETWEEN 8 and 10;

结果将是一个包含 myNames 的人/事物的表格,例如 Sam...(Samantha、Samuel、Samira....),并且 entryTime 介于 08:00:00.0000 和 10:59:59.9999 之间,无论它是什么日期.

于 2017-02-16T13:53:44.303 回答
0

就像使用带有 HOUR 输入参数的 EXTRACT() 函数一样的解决方案,您可以使用 HOUR() 函数,如下所示

SELECT * FROM EXA_DBA_AUDIT_SQL WHERE HOUR(START_TIME) BETWEEN 8 and 9; -- up to 9:59:59
于 2020-02-22T14:48:02.380 回答