我在这里有这个样本陈述:
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_date
为timestamp
答案 0 :(得分:2)
栏目详情:
modified_date
:TIMESTAMP
以下是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
数据类型将产生以下值:
DATE
为modified_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
子句的测试存储过程。