【问题标题】:Substract an hour from date SQL从日期 SQL 中减去一个小时
【发布时间】:2015-05-13 05:48:54
【问题描述】:

我有一个带有date 属性的实体,表示为String(我无法将其更改为日期或时间戳)。我需要获取所有最新记录(不超过一小时)。 我有一个返回最后一条(最年轻的)记录的 SQL 查询,现在我需要以某种方式从中减去一个小时:

SELECT p FROM Invoice p WHERE date >= ((SELECT MAX(date) FROM Invoice)

它是 Java 和 Posgresql。当日期表示为字符串时,这可以使用 SQL 完成吗?

【问题讨论】:

  • 那里的日期格式是什么?
  • PostgreSQL date difference 的可能重复项
  • 你需要parse it然后使用DATE_SUB。如果不将数据存储为某种日期,这将非常缓慢。
  • 日期格式为:"yyyy/MM/dd HH:mm:ss"
  • @BoristheSpider:Postgres 中没有 date_sub

标签: java sql postgresql


【解决方案1】:
SELECT p, to_timestamp(p.data, 'YYYYMMDD HH12MI') - interval '1 hour' new_dt
FROM Invoice p WHERE date >= ((SELECT MAX(date) FROM Invoice)

http://www.postgresql.org/docs/current/static/functions-datetime.html

http://www.postgresql.org/docs/current/static/functions-formatting.html

您必须修改 to_timestamp 的日期格式模式。我不知道你的数据库是什么格式的。

【讨论】:

  • 错误:格式化字符串中“mm”字段的值冲突详细信息:此值与先前对相同字段类型的设置相矛盾。数据库示例:2015/03/11 12:55:55
  • 您是否将“YYYYMMDD HH12MI”更新为与数据库中相同的格式?
  • 是的,我做了:'yyyy/MM/dd HH:mm:ss;
  • Postgre 有自己的日期格式。 SimpleDateFormat 在那里不起作用。检查我们的 functions-formatting.html 链接。试试这个:YYYY/MM/DD HH:MI:SS
【解决方案2】:

在java中可以通过解析来实现。但是在sql中是不可能的,因为你得到日期的数据类型是String。

【讨论】:

  • SQL 中的字符串比较真的有效吗? SELECT p FROM Invoice p WHERE date >= :lastHour 假设 lastHour 是正确解析的字符串(减去一小时)
【解决方案3】:

假设日期是列名,

select * from Invoice where "date"::date > now()-'1 hour'::interval

【讨论】:

    【解决方案4】:

    使用to_date() 将字符串转换为实际的date
    在此过程中:您获取最新行的查询也可以得到改进:

    SELECT *
         , to_date(date, 'YYYY-MM-DD') - interval '1 hour' AS ts
    FROM   Invoice p
    ORDER  BY date DESC NULLS LAST
    LIMIT  1;
    

    假设为 ISO 格式。无论哪种方式,您的文本表示都必须工作以适应排序顺序,或者您需要做更多的事情。

    date 中减去interval 会自动生成timestamp

    不要选择p,这是表别名,会让您将整行作为单列而不是单列。

    ORDER BY / LIMIT 1 更快更可靠。您的构造可以返回多行。

    您应该在date 上有一个索引以加快速度。

    您仍应将其存储为 date,而不是字符串。即使你说你不能。

    并且不要使用基本类型名称作为列名。

    【讨论】:

      猜你喜欢
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      相关资源
      最近更新 更多