我目前在使用Oracle数据库时遇到以下问题:
我有2列约会要阅读:prepare()
和self.finished()
。它们都具有DateTime作为数据类型。
我需要调整值的时间(只有时间,日期应该保持不变)。
例如,date_from
包含date_to
作为值,
但应更改为“一天的开始”-> {{1}
例如,date_from
包含10.10.2017 14:21:00
作为值,
但应更改为“一天结束”-> {{1}
是否可以通过这种方式进行操作?我 不能 对数据进行更新或永久更改。仅甘特图需要此格式,我没有其他方法可以更改它。
预先谢谢您!
答案 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;