Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Неправильная синтаксическая ошибка как Postgres

Автор вопроса: Hare Rama Hare KrishnaОтветов: 2

Я postgres, вот мой запрос

update cust_final_1 as cust set cust.enure_days=datediff(day,1date,current_date)
from  card as card join  cust_final_1 as cust on cust.cust_id=card.cardh_cust_id
left join bt_time as tim on card.cardh_act_dt=tim.time_id

при выполнении выдает ошибку как неправильный синтаксис рядом с "как"

Что за ошибка

  • Это не синтаксис Postgres. datediff() не является функцией Postgres. Gordon Linoff 02.12.2014

postgresqlsql

Ответы

Ответ 1 · Radu Gheorghiu

Это должно сработать для вас:

UPDATE cust
SET cust.enure_days = datediff(day, 1 DATE, CURRENT_DATE)
FROM card AS card
INNER JOIN cust_final_1 AS cust
    ON cust.cust_id = card.cardh_cust_id
LEFT JOIN bt_time AS tim
    ON card.cardh_act_dt = tim.time_id

Просто замените имя таблицы псевдонимом сразу после ключевого слова UPDATE.

Ответ 2 · mlinth

Не уверен, что означают ваши столбцы, но вот. Я предполагаю, что "1date" - это дата, с которой вы хотите получить разницу.

UPDATE cust_final_1
SET enure_days=current_date - "1date" -- datediff is not postgresql, just subtract if they are both dates
FROM card
left join bt_time as tim on card.cardh_act_dt=tim.time_id
WHERE cust_final_1.cust_id=card.cardh_cust_id

Я также с подозрением отношусь к левому соединению. Зачем это делать? Если в bt_time нет соответствующей записи, а в этой таблице есть "1date", вы обновляете запись со значением NULL. Я бы предложил использовать INNER JOIN, что означает, что отсутствующие записи ничего не делают.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы