PreparedStatement psnmt=con.prepareStatement("SELECT (?)-(?) as DiffDate FROM dual");
psnmt.setTimestamp(1,ctenderdate);
psnmt.setTimestamp(2,btenderdate);
ResultSet resrt=psnmt.executeQuery();
if(!resrt.next())
{
out.println("No Records Found");
}
else
{
do
{
datediff=resrt.getString("DiffDate");
}
while(resrt.next());
System.out.println("the no of days Difference"+datediff);
}
ctenderdate = 2015-06-27 00:00:00.0
btenderdate = 2015-06-29 00:00:00.0
datediff = 1 10:18:51.940000000
预期日期= 2
如何将日期替换为天数
答案 0 :(得分:1)
修改
减去TIMESTAMP值
如果我们真的想减去两个TIMESTAMP
值,那么我们必须使用返回的INTERVAL DAY TO SECOND
数据类型。最简单的方法是使用EXTRACT
函数。
如果想要返回整数天数(模拟CEIL
函数),那么我们可以测试是否有任何部分时间(HOUR
,MINUTE
,SECOND
)非零。如果它们都为零,我们只能使用DAY
部分。否则,我们必须在DAY
部分添加1,然后返回。
例如:
SELECT EXTRACT(DAY FROM diff.idts)
+ CASE
WHEN EXTRACT(HOUR FROM diff.idts) > 0
OR EXTRACT(MINUTE FROM diff.idts) > 0
OR EXTRACT(SECOND FROM diff.idts) > 0
THEN 1
ELSE 0
END
AS days_diff
FROM ( SELECT ? - ? AS idts FROM dual ) diff
原始回答
对于Oracle数据库,您可以在数据库中执行此操作:
SELECT CEIL(TO_DATE(?,'YYYY-MM-DD HH24:MI:SS.F')-TO_DATE(?,'YYYY-MM-DD HH24:MI:SS.F'))
FROM dual
这假设绑定参数作为字符串传递,格式与TO_DATE函数中指定的格式模型匹配,例如:
'2015-06-27 14:45:21.0'
(由于使用了dual
表,因为你在两个日期之间使用减法运算,所以我假设是Oracle。你需要为不同的数据库使用不同的语句。)
要解压缩那个表达式......
Oracle TO_DATE
函数将字符串转换为Oracle DATE
值。第二个参数是格式模型,指定第一个参数的格式。
两个DATE
值之间的减法运算会将差值作为天数(整数天加上小数天)返回。
CEIL
函数将非整数值四舍五入到下一个更高的整数。
<强>后续强>
问:如何将它与时间戳一起使用?
A:两个TIMESTAMP
值的减法将作为INTERVAL DAY TO SECOND
数据类型返回。我宁愿避免使用它。
在Oracle中,当我们减去两个DATE
值时,我们得到一个十进制数。这更容易使用。
就&#34;舍入&#34;而言如果天数不同,我可以忽略小数秒。
如果我必须传递TIMESTAMP
值,我会将它们转换为DATE
值。上面的表达式已经预期了字符串值,因此我只需将 ?
替换为
TO_CHAR(?,'YYYY-MM-DD HH24:MI:SS')
如果我要求传递TIMESTAMP
数据类型,并返回整数天差异四舍五入,我会使用这样的查询:
SELECT CEIL( TO_DATE(TO_CHAR( ? ,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS')
- TO_DATE(TO_CHAR( ? ,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS')
) AS days_diff
FROM dual
答案 1 :(得分:0)
结帐this link。有几小时或几分钟的结果答案。你在寻找什么应该是相似的。
我的坏。我不应该只发布一个链接答案。你能做什么,如下所述:
SELECT TRUNC (SYSDATE) - TO_DATE ('10/20/2012', 'mm/dd/yyyy') FROM DUAL;
请注意以下详细信息:
ENDDATE - STARTDATE会给你一个与之对应的数字 这两个日期之间的天数。
如果您想要以小时为单位的结果,请乘以24;如果分钟,乘以 到24 * 60等等。
您还可以将结果转换为INTERVAL。有两种类型 间隔:NUMTODSINTERVAL(ENDDATE - STARTDATE,'DAY')或 NUMTOYMINTERVAL(ENDDATE - STARTDATE,'DAY')