【问题标题】:PostgreSQL Between clausePostgreSQL 之间的子句
【发布时间】:2013-04-08 08:56:41
【问题描述】:

我这里有这个示例语句:

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

【问题讨论】:

  • 请显示您遇到问题的代码。如果是 Java 代码,请展示一个独立的 Java 类来说明问题。还包括您的 PgJDBC 和 PostgreSQL 版本以及运行测试程序后 PostgreSQL 错误日志的内容。
  • 克雷格·林格,感谢您的光临,很抱歉花费您的时间。我能够解决这个问题。我发现是我的测试程序使用这个 'WHERE e.modified_date >= '2013-04-02'::TIMESTAMP AND e.modified_date
  • 然后考虑发布一个有用的解释作为答案,以便以后发现此问题的其他人可以从中学习。如果你这样做,请在这里评论,我会投票。
  • 嗨,克雷格,答案已发布。

标签: java postgresql stored-procedures


【解决方案1】:

列详细信息:

modified_date : TIMESTAMP

这是在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

此解释仅表明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_dateString 值转换为 DATE 数据类型将产生以下值:
modified_date as TIMESTAMP = '2013-04-02 14:05:45.8611'
modified_date as DATE = @ 987654352@

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

String value STRING = @98765
String value as DATE = '2013-04-02'

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

要回答我的问题,请使用以下 WHERE 子句:

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

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

【讨论】:

    猜你喜欢
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    相关资源
    最近更新 更多