В вашем последнем выражении CREATE VIEW
вы пытаетесь умножить text
, что не может работать:
SELECT To_Char(STARTTIME - ENDTIME, 'HH24:MI TZR')*24 AS DURATION
*24
работает с текстом to_char()
return.
Вы должны умножить интервал перед преобразованием в текст.
Вы определяете столбец Science varchar2(6)
, затем вставляете 'SCIENCE'
, слово из 7 букв?
Я также исправил синтаксическую ошибку в вашем операторе INSERT: отсутствует '
.
О вашем комментарии:
«Я хотел бы вставить метку времени с часовым поясом при создании моих таблиц. Может ли тип данных DATE сделать это тоже?
Читайте о типах данных в руководстве .
Тип данных date
не включает информацию о часовом поясе.
Если под «разницей в часовых поясах» вы подразумеваете разницу между модификаторами часовых поясов, используйте ее для расчета:
SELECT EXTRACT(timezone_hour FROM STARTTIME) AS tz_modifier FROM tbl
Ключевые слова здесь timezone_hour
и timezone_minute
. Прочитайте подробнее в руководстве .
Но имейте в виду, что эти цифры зависят от летнего времени и таких махинаций. Очень неопределенная территория!
Получить его в красивом формате - пример:
SELECT to_char((EXTRACT (timezone_hour FROM STARTTIME) * 60
+ EXTRACT (timezone_minutes FROM STARTTIME))
* interval '1 min', 'HH:MI')
В PostgreSQL у вас будет более простой EXTRACT (timezone FROM STARTTIME)
, но я не думаю, что Oracle поддерживает это. Не могу проверить сейчас.
Вот простая демонстрация того, как вы можете округлять минуты до часов:
SELECT EXTRACT(hour FROM (ENDTIME - STARTTIME))
+ CASE WHEN EXTRACT(minute FROM (ENDTIME - STARTTIME)) >= 30 THEN 1 ELSE 0 END
FROM Test;