sql-math

rfbsl7qr  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(326)

我正在使用oraclesql。我有一些日期可能在加载时格式不好。
我在做一个基本的测试 Max(date)-Min(Date) 在几天内得到差别。我的结果是:

+000000156 00:00:00.000000
+000000149 00:00:00.000000
+00 00:00:00.000000

我想用这些日期差异(平均值等)做一些基本的计算,但我得到一个错误消息。
如何将这些字符串转换成数字?

jhiyze9q

jhiyze9q1#

我猜这些列是时间戳,而不是日期,因为结果是间隔而不是数字。正如您所发现的,oracle没有足够的时间来重载间隔的标准聚合函数(在oracle database ideas论坛上投票支持此功能),目前您仍然需要编写自己的或将时间戳转换为日期。

with demo (start_date, end_date) as
     ( select timestamp '2019-12-31 00:00:00', timestamp '2020-06-04 00:00:00' from dual union all
       select timestamp '2020-01-31 00:00:00', timestamp '2020-06-28 00:00:00' from dual
     )
select end_date - start_date as elapsed_interval
     , cast(end_date as date) - cast(start_date as date) as elapsed_days
from   demo;
ELAPSED_INTERVAL              ELAPSED_DAYS
----------------------------- ------------
+000000156 00:00:00.000000000          156
+000000149 00:00:00.000000000          149
0yycz8jy

0yycz8jy2#

带日期的基础数学:
日期+数字=日期+天数(也可以是分数)

SELECT SYSDATE + 1 FROM DUAL; -- tomorrow

date-number=日期-天数

SELECT SYSDATE - 1/24 FROM DUAL; -- one hour ago

date-date=日期之间的天数(也是天数的分数)
日期+日期=不可能
months_between(date1,date2)=返回两个日期之间的月份
add_months(date,number)=将数字(months)添加到日期
如果您有一个字符串或数字,并且它可以是一年中的第n天(例如156),则可以使用to\u date('156','ddd')在date中进行转换
如果您有一个具有特定格式的字符串,您可以将其转换为date with to\ u date(字符串,您想象的日期格式)
https://www.techonthenet.com/oracle/functions/to_date.php
如果您需要相反的转换,即将日期转换为字符(或数字),请使用to\ char(日期,日期格式)

相关问题