我在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函数。
感谢您的帮助!
答案 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,返回值是两个日期之间的秒数差异。我认为最好的想法是修改功能。