使用括号的 Interbase XE7 优先级

Interbase XE7 Precedence using Brackets

为了演示我遇到的问题,我使用了一个 table,它有一个 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') 

(上面不会 return 任何行。似乎表现得好像括号中的优先级没有变化)

作为测试,我做了以下操作。 如果我从 'AND' 的第二部分删除时间限制,行将被 returned,从 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')

(Returns 来自 07:00 的行如预期)

查询是否有明显错误? 我尝试了更多的括号、不同的日期格式等,但没有任何区别。 它似乎表现得好像没有括号。

我在拖网中没有发现任何与此相关的问题。如果记录中有时间戳,它可能会更直接,但事实并非如此。 任何帮助表示赞赏。

谢谢

詹姆斯 F

第一个查询同时使用:

V_W1W2_LOGS.W1_TIME >= '07:00:00'

...AND...

V_W1W2_LOGS.W1_TIME < '07:00:00'

...这是一个废话

也许您的意思是 OR 介于两者之间?

除了fanaghirocco的回答。

您应该分别使用 timestamp 而不是 datetime。 类似的东西:

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'