【问题标题】:I need to format a date in Postgres我需要在 Postgres 中格式化日期
【发布时间】:2026-02-13 10:30:01
【问题描述】:

我在 Postgres 中有一个查询:

SELECT EXTRACT(EPOCH FROM (NOW() - TO_DATE('11-08-2001 10:35:54','YYYY-MM-DD HH24:MI:SS')))

结果类似于“63068231613.0091”。不知道怎么格式化TO_DATE()的内容才能得到正确的值,肯定是now()和data参数的年份差。

注意:这个选择是在一个函数中,所以唯一可以修改的是TO_DATE('11-08-2001 10:35:54','YYYY-MM-DD HH24:MI:SS')。这个内容是从Java方法生成的,我有修改方法的权限,但是不允许修改SQL函数。

感谢您的帮助!

【问题讨论】:

  • 如果不能修改SQL,那为什么不用Java 格式化呢?无论如何,这听起来像是一件更明智的事情,IMO...
  • 我可以修改“TO_DATE(..)”的内容。
  • 哦,我明白了——Java 方法不是处理返回的数据,而是生成查询的一部分。伊克。结果 does 是否有任何理由必须在 SQL 中格式化?什么处理结果?
  • java方法返回字符串“TO_DATE(..)”
  • the years difference between now() and the data parameter 是一个模棱两可的定义。有多种解释方式。请澄清。

标签: java postgresql datetime


【解决方案1】:

我尝试使用 to_timestamp,返回值是两个日期之间的秒差。我认为最好的办法是修改函数。

【讨论】:

    【解决方案2】:

    首先,您的to_date 函数中有错误。您的格式字符串 'YYYY-MM-DD HH24:MI:SS' 与您提供的日期不匹配 '11-08-2001 10:35:54'。正确的格式字符串是'DD-MM-YYYY HH24:MI:SS'

    您的 SQL 代码的另一个可能问题是 to_date 函数将格式化日期舍入为天,因此您的字符串的 10:35:54 部分将被完全忽略。您可以改用 to_timestamp 函数来修复它,但如果您只对年份差异感兴趣,那么这对您来说不是问题。

    对于返回的结果,您的代码将以秒为单位返回当前时间与11-08-2011 00:00:00 之间的差(因为to_date 忽略了时间)。您可以通过在您的 Java 应用程序中将其除以 31536000 来将其转换为整年。

    【讨论】:

      【解决方案3】:

      如果您只能修改“TO_DATE()”而不是函数的其余部分,那么您必须在 java 中进行格式化,因为您使用的是“EXCTRACT EPOCH FROM”,在您的情况下以秒为单位:@ 987654321@

      如果你能稍微修改一下SQL函数,也许你可以试试“EXTRACT YEAR”:http://www.postgresql.org/docs/9.4/static/functions-datetime.html

      【讨论】: