Noneyabees Ответов: 1

Как преобразовать строку военного времени в стандартное время?


Я получаю эту ошибку ERROR: синтаксическая ошибка В или рядом с "," в этой строке
SELECT CONVERT(VARCHAR(7),CONVERT(time, OVERLAY(departure_time,3, 0,':')), 100) INTO cancel_time


Мне было интересно, как я могу исправить эту ошибку. Вот полная полная функция

CREATE OR REPLACE FUNCTION getCancellationTime(reserve_num int)
    returns time as
    $$
    DECLARE
    cancel_time time; --LOCAL VARIABLE
    BEGIN --casting military time string into standard time
        SELECT CONVERT(VARCHAR(7),CONVERT(time, OVERLAY(departure_time,3, 0,':')), 100) INTO cancel_time
        FROM PT.Flight_schedule_information A, PT.Reservation_Detail B
        WHERE A.flight_number = B.flight_number AND B.reservation_number = reserve_num;
        return convert(varchar(4),cancel_time + 12, 114); --return 12 hours before departure time.
    end;
    $$ language plpgsql;


Что я уже пробовал:

Я исследовал другие источники в интернете

1 Ответов

Рейтинг:
2

OriginalGriff

Синтаксис функции наложения выглядит совсем не так: Функция OVERLAY SQL[^] так что taht-это, вероятно, то, на что жалуется SQL.

Но... почему вы вообще храните значения даты и времени в строках? Это ошибка новичков - преобразуйте "военное время" (что бы это ни было) в значение UTC DATETIME на вашем языке презентации, когда оно введено, и сохраните его в своей БД. Затем, когда вам это нужно, он находится в согласованном формате, который можно преобразовать в "военное время" или "обычное время" по мере необходимости и сравнить, отсортировать, обработать, добавить все, что вам нужно.

Хранение любого значения, которое не является строкой в Столбцах VARCHAR или NVARCHAR, всегда является ошибкой, которая сделает вашу жизнь намного сложнее, даже если это сделает исходный код вставки намного проще с самого начала.