PostgreSQL之间的子句

时间:2013-04-08 08:56:42

标签: java postgresql stored-procedures

我在这里有这个样本陈述:

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

1 个答案:

答案 0 :(得分:2)

栏目详情:

modified_dateTIMESTAMP

以下是modified_date字段

中插入的实际值

MODIFIED_DATE
没有时区的时间戳

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

简要说明为什么测试程序带有<{1}}的<{1}}子句

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语句仅返回与SELECT子句对应的值,当且仅当WHERE正好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_date值转换为String数据类型将产生以下值:
DATEmodified_date = TIMESTAMP '2013-04-02 14:05:45.8611'modified_date = DATE

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

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

注:
这也可以在不将'2013-04-02'值转换为String数据类型的情况下完成。我DATE的投射是为了我的验证目的。

要回答我的问题,请使用String条款:

WHERE

不会返回任何内容只是我正在调用使用错误的WHERE e.modified_date::DATE between '2013-04-02'::DATE AND '2013-04-02'::DATE 子句的测试存储过程。