Datetime 在SQL Developer中为日期时间减去时间

Datetime 在SQL Developer中为日期时间减去时间,datetime,oracle-sqldeveloper,Datetime,Oracle Sqldeveloper,我正在使用SQLDeveloper(3.1.06)从DWHP获取信息。我想从日期时间(dd/mm/yy)中减去时间(hh:mm:ss)--->timecol\u 3-->datetime\u col4 (10/01/15 01:00:00)-(03:00:00)应显示(09/01/15 22:00:00) 现在,日期和时间并没有被合并在一起,它们也不是在上面的格式中。(它们是mm/dd/yyyy和hhmmA或hhmmP格式),因此我使用以下语法将其转换为(dd/mm/yy hh:mm:ss)格式

我正在使用SQLDeveloper(3.1.06)从DWHP获取信息。我想从日期时间(dd/mm/yy)中减去时间(hh:mm:ss)--->timecol\u 3-->datetime\u col4 (10/01/15 01:00:00)-(03:00:00)应显示(09/01/15 22:00:00)

现在,日期和时间并没有被合并在一起,它们也不是在上面的格式中。(它们是mm/dd/yyyy和hhmmA或hhmmP格式),因此我使用以下语法将其转换为(dd/mm/yy hh:mm:ss)格式-->

将字符(截止日期(datecol|||||timecol2,'dd/mm/yy hh24:mi:ss'),'dd/mm/yy hh24:mi:ss')作为日期时间4


您能帮忙吗???

看起来您的数据是字符串格式的(基于以粗体文本执行的操作):

将字符(截止日期(datecol|||||timecol2,'dd/mm/yy hh24:mi:ss'),'dd/mm/yy hh24:mi:ss')作为日期时间4

在oracle中,最好使用本机日期类型中的日期,而不是不断地在字符数据类型之间转换日期,因此datetime_col4最好这样表示:

to_date(datecol_1 || ' ' || timecol2, 'dd/mm/yy hh24:mi:ss') as datetime_col4
现在假设timecol_3也是hh24:mi:ss格式的字符串,其中hh24部分范围在00和23之间,您可以将timecol_3转换为间隔数据类型(oracle最接近的数据类型为纯时间数据类型),如下所示:

当强制转换到间隔时,需要前导“0”来表示间隔的天部分,在本例中为零天

在oracle中,间隔数据类型可以在彼此之间以及在日期[时间]数据类型之间进行增减,以便将最终结果作为日期类型(从基本列开始):

您可以使用final to_char()将其包装,以所需格式显示结果,或更改NLS_DATE_format会话设置,以所需格式输出所有日期数据类型:

ALTER SESSION NLS_DATE_FORMAT = 'DD/MM/YY HH24:MI:SS';

我并没有真正理解这个问题。我假设DWHP是您已经构建或正在使用的数据仓库的缩写。我猜您是说
datecolu_1
timecol2
分别是
varchar2
列,格式为“mm/dd/yy”和“hhmmA”。要将
datecol_1
转换为日期,将
timecol2
转换为间隔,减去两者,然后将结果转换为
varchar2
,格式为
dd/mm/yy hh24:mi:ss
。是这样吗?为什么一开始就将值存储在错误的数据类型中?为什么您的示例要将时间添加到日期中?@JustinCave的想法是首先以我想要的格式获取日期和时间,即以dd/mm/yy hh24:mi:ss格式,并以say col_1格式显示。现在我有了另一个专栏(比如col_2),它的时间是hh24:mi:ss。我想用col_1减去col_2来回答你的问题。我想将datecol_1和timecol_2组合在一个列中,然后从中减去一个新的timecol_3。为了组合这个日期和时间列,我使用了我在问题中写的语法。它似乎工作得很好。不确定是字符串还是日期时间格式。我想它是datetime格式的,因为我在末尾指定了'dd/mm/yy hh24:mi:ss'。让我知道这是否正确!
datecol_1
的数据类型是什么?
timecol2
的数据类型是什么?所需的
datetime\u col4
数据类型是什么?如果系统设计正确,则
datecol_1
datetime_col4
应分别为
date
,而
timecol2
应为间隔。但是您似乎没有使用正确的数据类型。好的。Datecol_1-->日/月/年
  to_date(datecol_1 || ' ' || timecol2, 'dd/mm/yy hh24:mi:ss')
- cast('0 '||timecol_3 as interval day to second) result
ALTER SESSION NLS_DATE_FORMAT = 'DD/MM/YY HH24:MI:SS';