查询中的SQL更改时间

时间:2018-10-09 12:18:32

标签: sql oracle

我目前在使用Oracle数据库时遇到以下问题: 我有2列约会要阅读:prepare()self.finished()。它们都具有DateTime作为数据类型。
我需要调整值的时间(只有时间,日期应该保持不变)。

例如,date_from包含date_to作为值,
但应更改为“一天的开始”-> {{1}

例如,date_from包含10.10.2017 14:21:00作为值,
但应更改为“一天结束”-> {{1}

是否可以通过这种方式进行操作?我 不能 对数据进行更新或永久更改。仅甘特图需要此格式,我没有其他方法可以更改它。

预先谢谢您!

4 个答案:

答案 0 :(得分:3)

是的,您可以使用Oracle的TO_DATE和TO_CHAR函数来实现。这仅取决于您是否需要将结果作为DATE或VARCHAR。 VARCHAR输出的语法如下所示:

TO_CHAR(date_from, 'DD.MM.YY') || ' 00:00:00'
TO_CHAR(date_to, 'DD.MM.YY') || ' 23:59:59'

如果您需要其中的DATE值,只需在其周围添加TO_DATE函数:

TO_DATE((TO_CHAR(date_from, 'DD.MM.YY') || ' 00:00:00'), 'DD.MM.YY HH24:MI:SS')
TO_DATE((TO_CHAR(date_to, 'DD.MM.YY') || ' 23:59:59'),  'DD.MM.YY HH24:MI:SS')

我没有测试,但是差不多。

这有帮助吗?

欢呼

Nikao

答案 1 :(得分:1)

如果需要显示结果,请尝试以下操作:

select to_char(date_from, 'DD.MM.YYYY') ||' 00:00:00' as date_from,
       to_char(date_to,   'DD.MM.YYYY') ||' 23:59:59' as date_to
  from table_name

但是您可能需要比较间隔。在这种情况下,您可以使用trunc函数来分配时间:

select *
  from table_dates t,
       other_table o
 where trunc(o.some_date) between trunc(t.date_from) and trunc(t.date_to)

UPD :首先,我使用TRUNC将日期隐式转换为字符串。但这可能导致意外的结果。而是,将TO_CHAR与期望用于输出的格式模型一起显式使用,而无需使用TRUNC。 (谢谢@ MT0)

答案 2 :(得分:0)

那么您想返回一天的开始和结束吗?

select trunc(start_date) as day_start, -- Strips off the time part of the date
       trunc(end_date) + 1 - (1/86400) as day_end -- As above, but we add 1 day and minus 1 second
from My_Table

此外,Oracle具有日期和时间戳的日期格式,没有日期时间

答案 3 :(得分:-1)

这可能会对您有所帮助:

    SELECT to_char(current_timestamp,'yyyy-mm-dd hh:mm:ss') FROM dual;

    SELECt trunc(current_timestamp)||'  23:59:59' FROM dual;