Sql Изменить время в запросе - PullRequest
0 голосов
/ 09 октября 2018

В настоящее время у меня возникает следующая проблема, связанная с базой данных Oracle: у меня есть 2 столбца встречи, которые я хочу прочитать: date_from и date_to.Оба типа DateTime имеют тип данных.
Мне нужно настроить время значения (и только время, дата должна оставаться неизменной).Например,

date_from содержит 10.10.2017 14:21:00 в качестве значения,
, но его следует заменить на "начало дня" -> 10.10.2017 00:00:00

date_to дляпример содержит 11.10.2017 11:47:00 в качестве значения
, но его следует изменить на "конец дня" -> 10.10.2017 23:59:59

Возможно ли каким-либо образом манипулировать этим способом?Я не могу сделать обновление или постоянное изменение данных.Этот формат нужен только для диаграммы Ганта, у меня нет другого способа изменить его.

Заранее спасибо!

Ответы [ 4 ]

0 голосов
/ 09 октября 2018

Если вам нужно показать результат, попробуйте следующее:

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)

0 голосов
/ 09 октября 2018

это может вам помочь:

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

    SELECt trunc(current_timestamp)||'  23:59:59' FROM dual;
0 голосов
/ 09 октября 2018

Да, этого можно добиться с помощью функций Oracle TO_DATE и TO_CHAR.Это будет зависеть только от того, нужен ли вам результат в качестве ДАТЫ или 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')

Я не проверял это, но это в значительной степени так.

Помогает ли это?

Приветствия

Никао

0 голосов
/ 09 октября 2018

То есть вы хотите вернуть начало и конец дня?

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 имеет форматы даты: Дата и Временная метка, без даты и времени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...