为了演示我遇到的问题,我使用的是一个表,其中DATE和TIME字段作为记录的一部分。 对于示例,我希望从一天的07:00到第二天的06:59过滤,所以我的查询如下:
SELECT * FROM V_W1W2_LOGS WHERE (V_W1W2_LOGS.W1_DATE >= '2015-05-20' AND V_W1W2_LOGS.W1_TIME >= '07:00:00') AND (V_W1W2_LOGS.W1_DATE<='2015-05-22' AND V_W1W2_LOGS.W1_TIME < '07:00:00')
(上面不会返回任何行。似乎表现得好像括号中没有优先顺序)
作为测试,我做了以下操作。 如果我从'AND'的第二部分删除时间约束,将从07:00开始返回行,但是在第二天的整个期间。
(...) WHERE (V_W1W2_LOGS.W1_DATE >= '2015-05-20' AND V_W1W2_LOGS.W1_TIME >= '07:00:00') AND (V_W1W2_LOGS.W1_DATE<='2015-05-22')
(按预期从07:00返回行)
查询有明显错误吗? 我尝试了更多括号,不同的日期格式等,但它没有任何区别。 它似乎表现得好像括号不在那里。
我的拖网中没有看到任何与此有关的问题。如果记录中有时间戳,则可能更直接,但事实并非如此。 任何帮助表示赞赏。
由于
James F
答案 0 :(得分:1)
第一个查询同时使用:
V_W1W2_LOGS.W1_TIME >= '07:00:00'
... AND
...
V_W1W2_LOGS.W1_TIME < '07:00:00'
...这是废话。
也许你的意思是OR
介于两者之间?
答案 1 :(得分:0)
除了对fanaghirocco的回答。
您应该分别使用timestamp
代替date
和time
。
这样的事情:
SELECT * FROM table1
WHERE
cast (fdate ||' '||ftime as timestamp) >= '2015-05-01 07:00:00'
and
cast (fdate ||' '||ftime as timestamp) < '2015-05-02 07:00:00'