SQL - извлечь время и смещение из него - PullRequest
1 голос
/ 25 октября 2010

Если у меня есть поле DateTime в таблице.Как я могу извлечь только время из строки, а затем вернуть значение смещения.

Например, я хочу смещение против полуночи.Поэтому, если время 00:45, мне нужно значение 45. Если время 23:30, мне нужно значение -30.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 25 октября 2010

Попробуйте:

(datecol - round(datecol))*24*60

Например:

with times as
( select trunc(sysdate) t from dual
  union
  select trunc(sysdate)+0.25 t from dual
  union
  select trunc(sysdate)+0.5 t from dual
  union
  select trunc(sysdate)+0.75 t from dual
)
select (t-round(t))*24*60 from times;

0
360
-720
-360

Обратите внимание, что полдень рассматривается как 720 минут до полуночи.

0 голосов
/ 25 октября 2010

Хорошо, предполагая время с 12 до 23 часов, как до полуночи, и с 0 до 11 часов, как после полуночи, другими словами, как сказал @Tony Andrews Полдень рассматривается как 720 минут до полуночи

Вот еще одно решение -

SELECT (
  CASE
    WHEN TO_CHAR(datetimefield,'HH24') BETWEEN 12 AND 23
    THEN -1 * (60 * (12 - TO_CHAR(datetimefield,'HH')) - TO_CHAR(datetimefield,'MI'))
    WHEN TO_CHAR(datetimefield,'HH24') BETWEEN 0 AND 11
    THEN 60 * (TO_CHAR(datetimefield,'HH')) + TO_CHAR(datetimefield,'MI')
  END) diff
FROM (select systimestamp datetimefield from dual);

Я использовал мою системную метку времени для тестирования. Вам нужно заменить запрос select systimestamp datetimefield from dual, чтобы получить собственное поле даты и времени из таблицы, чтобы оно работало для вас.

0 голосов
/ 25 октября 2010

Список поддерживаемых Oracle форматов даты и времени можно найти здесь: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements004.htm

Вы можете использовать эти форматы с функцией to_char - например:

select to_char(sysdate, 'mi') from dual

Похоже, вы выбрали способ представления времени, которого нет в числе поддерживаемых, но ответ Тони должен соответствовать вашим требованиям.

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