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

我從表中選中要插入到表中,我的專欄的道場有沒有空約束和時間戳不允許'插入,請爲此提供備用如果時間戳是從選擇查詢如何合併時間戳和NOT NULL約束Postgres的

+0

錯誤:類型時間戳無效的輸入語法:「」 線:1 – TheDragonWarrior

+0

這讓我發現錯誤,當我嘗試插入,我知道怎麼把時間戳犯規讓「」 – TheDragonWarrior

+0

請告訴我們從'dojo'列數據。您目前正試圖將字符數據作爲時間戳插入。 –

回答

0

空,你可以使用像1月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

是的,我會改變它的時間戳格式 – TheDragonWarrior

0

您當前的查詢有解決的幾個問題,其中有兩個我認爲我的答案可以解決。首先,您試圖在dojo列中插入空字符串''以處理NULL值。這將不起作用,因爲空字符串不是有效的時間戳。正如其他人所指出的,一種解決方案是使用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

從select查詢的員工在其他數據庫中並且插入到其他數據庫中,兩個表都有相同的名稱和結構 – TheDragonWarrior

+0

@DragonWarrior感謝澄清。 –

+0

新手兄弟!函數to_timestamp(日期,未知)不存在 行:1 – TheDragonWarrior