1

我在这里有这个示例语句:

WHERE e.modified_date::DATE between '2013-04-02'::DATE
AND '2013-04-02'::DATE

注意:
这些日期实际上是变量。

在 pgAdmin 中,运行这将导致这个示例表:

username  modified_date
Sample     2013-04-02
Sample1    2013-04-02

这是我想要的结果。

但是,从 Java 调用 proc 将一无所获。更改第二个日期将返回之前的示例表。如果日期小于第二个变量,PostgreSQL 似乎正在评估日期。我错过了什么吗?

注:modified_datetimestamp

4

1 回答 1

2

栏目详情

modified_date::TIMESTAMP

modified_date这是在字段中插入的实际值

没有时区的modified_date
时间戳

2013-04-02 14:05:45.8611
2013-04-02 14:09:14.5422

简要说明为什么带有WHERE条款的测试程序

WHERE e.modified_date >= '2013-04-02'::TIMESTAMP 
AND e.modified_date <='2013-04-02'::TIMESTAMP

什么都不返回:

- 将String'2013-04-02'转换为TIMESTAMP数据类型将导致'2013-04-02 00:00:00'
- 首先,该WHERE子句验证字段modified_date(参考值)是否大于或等于'2013-04-02 00:00:00'; 另一方面,它将返回false
- 其次,该WHERE子句验证字段modified_date(参考值)小于或等于'2013-04-02 00:00:00'; 这将返回为false

这种解释仅表明,SELECTWHERE且仅当modified_date恰好'2013-04-02 00:00:00'

至于这个WHERE条款:

WHERE e.modified_date::DATE BETWEEN '2013-04-02'::DATE
AND '2013-04-02'::DATE


将两者modified_dateString值转换为DATE数据类型将导致以下值:
modified_dateas TIMESTAMP= '2013-04-02 14:05:45.8611'
modified_dateas DATE= '2013-04-02'

modified_dateas TIMESTAMP= '2013-04-02 14:09:14.5422'
modified_dateas DATE= '2013-04-02'

String valueas STRING= '2013-04-02'
String valueas DATE='2013-04-02'

注意:
这也可以在不将String值转换为DATE数据类型的情况下完成。铸造String我的一部分是为了我的验证目的。

要回答我的问题,请使用以下WHERE条款:

WHERE e.modified_date::DATE between '2013-04-02'::DATE
AND '2013-04-02'::DATE

不返回任何东西只是我调用了使用错误WHERE子句的测试存储过程。

于 2013-04-11T02:02:15.310 回答