當我試圖text
值轉換爲timestamp
值返回空值。 對於下面的表稱爲a
:的Postgres的功能錯誤/失敗鑄造
id | c1
----+--------------------
1 | 03-03-2000
2 | 01-01-2000
3 | 12/4/1990
4 | 12 Sept 2011
5 | 12-1-1999 12:33:12
6 | 24-04-89 2:33 am
我試圖執行與一個select
投如下:
select id, c1,
c1::timestamp
as c2 from a;
這正常工作,如果有隻有第5排,但第6排c1
是24-04-89 2:33 am
它引發以下錯誤:
ERROR: date/time field value out of range: "24-04-89 2:33 am"
HINT: Perhaps you need a different "datestyle" setting.
我要的是null
對於不能沒有鑄造而不是時間戳命令完全失敗的那些值。就像這樣:
id | c1 | c2
----+--------------------+---------------------
1 | 03-03-2000 | 2000-03-03 00:00:00
2 | 01-01-2000 | 2000-01-01 00:00:00
3 | 12/4/1990 | 1990-12-04 00:00:00
4 | 12 Sept 2011 | 2011-09-12 00:00:00
5 | 12-1-1999 12:33:12 | 1999-12-01 12:33:12
6 | 24-04-89 2:33 am | (null)
(6 rows)
編輯:
此外,有沒有實現這一個通用的方法?即:(基於klin's answer)一個PLPGSQL包裝函數,其設定值,以null
如果纏繞功能引發錯誤。 對於例如:一個功能set_null_on_error
可以像這樣使用:
select id, c1,
set_null_on_error(c1::timestamp)
as c2 from a;
或
select id, c1,
set_null_on_error(to_number(c1, '99'))
as c2 from a;
除了編寫plpgsql函數之外,還有其他方法嗎? –
我不這麼認爲。但上帝給了我們plpgsql來使用它。 – klin
你可以看看問題中的編輯部分,讓我們知道這是否可以實現? –