PostgresqlPostgreSQL 替代 SQL Server 的
PostgreSQL 替代 SQL Server 的 try_cast
函式
Microsoft SQL Server 有一個我認為非常明智的函式,如果強制轉換不成功,
try_cast()
它會返回 anull
,而不是引發錯誤。這使得可以使用
CASE
表達式或 acoalesce
來回退。例如:SELECT coalesce(try_cast(data as int),0);
問題是,PostgreSQL 有類似的東西嗎?
提出這個問題是為了填補我的知識空白,但也有一般原則,即有些人更喜歡對某些使用者錯誤做出不那麼戲劇性的反應。
null
在 SQL 中返回 a比返回錯誤更容易。例如SELECT * FROM data WHERE try_cast(value) IS NOT NULL;
. 根據我的經驗,如果有 B 計劃,有時會更好地處理使用者錯誤。
如果從一種特定類型轉換為另一種特定類型就足夠了,您可以使用 PL/pgSQL 函式執行此操作:
create function try_cast_int(p_in text, p_default int default null) returns int as $$ begin begin return $1::int; exception when others then return p_default; end; end; $$ language plpgsql;
然後
select try_cast_int('42'), try_cast_int('foo', -1), try_cast_int('bar')
退貨
try_cast_int | try_cast_int | try_cast_int -------------+--------------+------------- 42 | -1 |
如果這僅適用於數字,另一種方法是使用正則表達式來檢查輸入字元串是否為有效數字。當您期望許多不正確的值時,這可能比擷取異常更快。