Конвертировать Varchar в ЛЮБОЙ формат времени - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть столбец varchar с именем begin_time, в котором 24-часовое время хранится в виде varchar без форматирования времени, т. Е. 1330

Мне нужно преобразовать этот varchar в пригодную временную метку, дату и т. Д., Где я могу легко преобразовать varchar в стандартный формат времени (1:30 PM)

Тип конечного формата не имеет значения , пока я могу конвертировать varchar в формат, которым я могу манипулировать, в стандартный формат.

Я пытался изучить Трюки формата Cognos (Эти функции предназначены для Metric Designer, а я использую Report Studio), но безрезультатно. Методы, которые я нашел, когда искал трюки, специфичные для оракула, казались слишком запутанными (используя безумно длинные правила регулярных выражений) для того, что мне нужно.

Если мне нужно указать дату, я могу использовать столбец start_date и добавить время varchar. Примечание: start_date в формате date

Пример

select 
to_date('08/27/2018','MM/DD/YYYY') as start_date
, '1300' as begin_time
from dual

В конечном итоге мне нужно просто вывести время как 1:00 PM

Любая помощь будет принята с благодарностью. Я бьюсь головой об стену об этом ... Я привык использовать проприетарные коды в течение некоторого времени и не имею большого опыта работы с настоящими форматами даты и времени.

Обновления ответов на вопросы

  • Алекс Пул, я не утверждаю, что эта система лучшая ... Она предоставляется поставщиком. :)
  • BEGIN_TIME - это всегда 4 символа
  • Похоже, я немного переосмыслил ... Возможно, Littlefoot прибил его по голове, но, к сожалению, у меня не будет возможности проверить это до завтра.

Спасибо всем за быстрый ответ. У меня могут остаться волосы, когда этот запрос закончится:)

Заключительная мысль

Мой урок из этого прост: если вы имеете дело с форматами времени, не отказывайтесь от идеи использовать функцию формата Date .

1 Ответ

2 голосов
/ 08 апреля 2019

Ищете это?

SQL> with test (col) as
  2    (select '1330' from dual)
  3  select to_char(to_date(col, 'hh24mi'), 'hh:mi am') result
  4  from test;

RESULT
--------
01:30 PM

SQL>

Что это делает?

  • TO_DATE преобразует имеющуюся строку (например, 1330) в допустимое значение DATE. По умолчанию это будет значение даты, усеченное до первого числа текущего месяца:

    SQL> alter session set nls_Date_format = 'dd.mm.yyyy hh24:Mi';
    
    Session altered.
    
    SQL> select to_date('1330', 'hh24mi') res1 from dual;
    
    RES1
    ----------------
    01.04.2019 13:30
    
    SQL>
    
  • применение к нему TO_CHAR, опять же с маской соответствующего формата, возвращает желаемый результат

...