Неверный синтаксис ввода для типа timestamp
Во время выполнения кода ниже я получаю сообщение об ошибке, указывающее на неверный синтаксис ввода для типа timestamp из admission_datetime.
UPDATE ccsm.stg_demographics_baseline
SET xx_los_days =
(CASE WHEN admission_datetime IS NULL OR
date_trunc('day',admission_datetime) = ''
THEN NULL
WHEN discharge_datetime IS NULL OR
date_trunc('day',discharge_datetime) = ''
THEN date_diff('day', admission_datetime, CURRENT_DATE)
ELSE
date_diff('day', admission_datetime, discharge_datetime)
END);
enter code here
1 ответ
Увидеть date_trunc
документация:
Возвращаемое значение имеет тип отметки времени или интервала со всеми полями, которые менее значимы, чем выбранное, установленное в ноль (или одно, для дня и месяца).
Поэтому вы не можете сравнить его с пустой строкой:
date_trunc('day', admission_datetime) = ''
invalid input syntax for type timestamp
сообщение об ошибке касается пустой строки (''
), не admission_datetime
колонка.
Кроме того, нет date_diff
функция в PostgreSQL. Просто вычесть один timestamp
от другого, и вы получите interval
результат:
SELECT timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00'
Ты получишь
interval '1 day 15:00:00'
Если вам нужна разница в днях, попробуйте это:
SELECT DATE_PART('day', timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00')
Результат 1
,
Смотрите здесь для примеров DATEDIFF
подобные выражения в PostgreSQL.