我需要在Postgres中格式化日期

时间:2015-08-11 08:31:54

标签: java postgresql datetime

我在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函数。

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

如果你只能修改“TO_DATE()”而不能修改函数的其余部分,那么你必须在java中进行格式化,因为你使用的是“EXCTRACT EPOCH FROM”,这在你的情况下是几秒钟:https://en.wikipedia.org/wiki/Unix_time

如果您可以稍微修改SQL函数,也许您可​​以尝试“EXTRACT YEAR”代替:http://www.postgresql.org/docs/9.4/static/functions-datetime.html

答案 1 :(得分:0)

首先,您的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将其转换为全年。

答案 2 :(得分:0)

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