我有一个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查询,它向我显示在12:00:00之前TIME的所有行。 无论什么日期(仅限时间),并将它们与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.%';
无效。我收到错误消息:
&#39;数据异常 - YYYY格式令牌的值无效;价值:&#39;%12:00:00。%&#39;格式:&#39; YYYY-MM-DD HH24:MI:SS.FF6&#39;
有没有办法解决这个问题,所以我可以选择一段时间,无论它是什么日期?
答案 0 :(得分: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;
结果将是一个人物/事物的表格,像Sam一样的myNames ...(Samantha,Samuel,Samira ......),并且在08:00:00.0000和10:59:59.9999之间的入口时间无论如何它的日期。
答案 1 :(得分:0)
就像使用带有HOUR输入参数的EXTRACT()函数一样的解决方案,您可以如下使用HOUR()函数
SELECT * FROM EXA_DBA_AUDIT_SQL WHERE HOUR(START_TIME) BETWEEN 8 and 9; -- up to 9:59:59