2017-01-10 11 views
1
insert into employee(eid,dojo) SELECT 
    14,coalesce(to_char(dojo,'dd-mm-yyyy'),'') 
     from employee; 

я должен вставить в таблицу, выбрав его из таблицы, моя колонка додзё имеет не нулевое ограничение и метку времени не позволяет «» для вставки просьба представить альтернативный для этого если метка времени равна нулю из отборного запросакак сливаться метку времени с не нулевым ограничением Postgres

+0

ОШИБКА: неверный входной синтаксис для типа временной метки: «» Line: 1 – TheDragonWarrior

+0

Это показывает мне, что ошибка, когда я пытаюсь вставить, я знаю, сог метка оленья кожа позволяет «» – TheDragonWarrior

+0

Пожалуйста, покажите нам данные из 'столбца dojo'. В настоящее время вы пытаетесь вставить символьные данные в метку времени. –

ответ

0

вы можете использовать некоторое значение даты по умолчанию, как 1 января 1900 или now() Ваш запрос должен быть как

insert into employee(eid,dojo) SELECT 
    14,coalesce(to_char(dojo,'dd-mm-yyyy'),now()) 
     from employee; 
+0

Вставка 'dd-mm-yyyy' в качестве метки не кажется мне правдой. –

+0

Я не хочу вставлять значения, если он равен нулю, но нужно, чтобы столбец был пустым – TheDragonWarrior

+0

Да, я изменю его на формат timestamp – TheDragonWarrior

0

Ваш текущий запрос имеет severals проблемы, два из которых я думаю, что мой ответ может разрешить. Во-первых, вы пытаетесь вставить пустую строку '' для обработки значений NULL в столбце dojo. Это не сработает, потому что пустая строка не является допустимой меткой времени. Как указывали другие, одним из решений было бы использовать current_timestamp в качестве заполнителя.

Другая проблема заключается в том, что вы неправильно используете to_char для форматирования данных временной метки. Вывод to_char - это строка, и способ, которым вы ее используете, заставит Postgres отклонить ее. Вместо этого вы должны использовать to_timestamp(), который может анализировать строку и возвращать метку времени. Что-то вроде следующего, что я верю, что вы собираетесь делать:

insert into employee (eid, dojo) 
select 14, coalesce(to_timestamp(dojo, 'DD/MM/YYYY HH:MI:SS PM'), current_timestamp) 
from employee; 

Это предполагает, что данные метки времени отформатирован следующим образом:

DD/MM/YYYY HH:MI:SS PM (e.g. 19/2/1995 12:00:00 PM) 

Он также не ясно, почему вы вставляете обратно в таблицу employee, которая имеет неиспользуемые данные, а не вставляет в новую таблицу. Если вы решите повторно использовать employee, вам может понадобиться очистить плохие данные позже.

+1

Сотрудник из запроса выбора находится в другой базе данных, а вставка находится в другой базе данных, обе таблицы имеют одинаковое имя и структуру. – TheDragonWarrior

+0

@DragonWarrior Спасибо за уточнение. –

+0

Новичок bro !!! функция to_timestamp (дата, неизвестно) не существует Строка: 1 – TheDragonWarrior

 Смежные вопросы

  • Нет связанных вопросов^_^