Преобразование метки времени в эпоху Unix в Oracle SQL - PullRequest
0 голосов
/ 01 июля 2019

У меня есть таблица из 20M записей в Oracle со столбцом datetime (один из столбцов) типа VARCHAR и в часовом поясе EST. Я пытаюсь создать новый столбец, конвертирующий дату и время в эпоху Unix, но он выдает ошибку.

create function unix_timestamp(pi_date date) return number is
    c_base_date constant date := to_date('1970-01-01 00:00:00', 'YYYY-MM-DD HH:MM:SS');
    c_seconds_in_day constant number := 24 * 60 * 60;
    v_unix_timestamp number;
begin
    v_unix_timestamp := trunc((pi_date - c_base_date) * c_seconds_in_day);

    if (v_unix_timestamp < 0 ) then
        raise_application_error(-20000, 'unix_timestamp:: unix_timestamp cannot be nagative');
    end if;

    return v_unix_timestamp;
end unix_timestamp;

Это функция, которую я создал, и когда я пытаюсь вызвать эту функцию, она выдает сообщение об ошибке:

ORA-01861: literal does not match format string
01861. 00000 -  "literal does not match format string"
*Cause:    Literals in the input must be the same length as literals in
           the format string (with the exception of leading whitespace).  If the
           "FX" modifier has been toggled on, the literal must match exactly,
           with no extra whitespace.
*Action:   Correct the format string to match the literal.

Могу ли я получить помощь?

1 Ответ

0 голосов
/ 01 июля 2019

Строка кода

c_base_date constant date := to_date('1970-01-01 00:00:00', 'YYYY-MM-DD HH:MM:SS');

неверный код формата часа и минуты; попробовать

c_base_date constant date := to_date('1970-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS');

MI минут (я забыл, что больше раз, чем я могу сосчитать), и включите 24 в формате Час (HH24). А также посмотрите комментарий MathGuy о часовом поясе и комментарии к date типу данных, не включая информацию о часовом поясе.

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