閱讀80 返回首頁    go windows


淺談Greenplum的Boolean類型與Text類型之間的轉換

在Greenplum或者Deepgreen中,如果我們想直接把Boolean類型轉化為Text,那麼可能會讓你失望,因為他們不支持這種直接轉化,但是可以通過UDF的方式實現,下麵來簡單看一下這個過程。

首先,當我們運行下麵的SQL來轉換Boolean為Text類型時,會得到一個大寫測錯誤:-D
DECLARE qgis_4 BINARY CURSOR FOR SELECT st_asbinary("location",'NDR'),ctid,"start_datetime"::text,"end_datetime"::text,"temperature"::text,"pressure"::text,boolout("rainfall")::text,"humidity"::text,"illuminance"::text,"uva"::text,"ubv"::text FROM "event"."weather_soratena" WHERE "location" && st_makeenvelope(136.92967584819169247,37.11712946054284856,137.3367917387353998,37.52424535108657011,4326) AND st_intersects(st_curvetoline("location"),st_makeenvelope(136.92967584819169247,37.11712946054284856,137.3367917387353998,37.52424535108657011,4326))

ERROR: cannot cast type cstring to text 
LINE 1: ...ture"::text,"pressure"::text,boolout("rainfall")::text,"humi...

錯誤的原因是GP不支持將cstring轉換成其他的數據類型(如下代碼顯示)
gpadmin=# select boolout('1')::text;
ERROR: cannot cast type cstring to text
LINE 1: select boolout('1')::text;
                             ^
gpadmin=# select '1'::bool::text;
ERROR: cannot cast type boolean to text
LINE 1: select '1'::bool::text;
                          ^

這時候我們該怎麼辦?放棄嗎?當然不,我們可以通過UDF(User Defined Function)的方式來變通實現。這裏我們定義一個BooleanToText函數,用來實現轉換功能:
postgres=# CREATE FUNCTION BooleanToText(boolean) RETURNS text STRICT IMMUTABLE LANGUAGE PLPGSQL AS $$ BEGIN IF $1 IS TRUE THEN RETURN 'true'; ELSE RETURN 'false'; END IF; END; $$;
CREATE FUNCTION
postgres=# CREATE CAST (Boolean AS Text) WITH FUNCTION BooleanToText(boolean);
CREATE CAST
postgres=# select '1'::bool::text;
 text
------
 true
(1 row)

有朋友說,你開頭的錯誤還是不能解決啊!姑且別急,接著看 ↓
針對cstring無法轉換成text的問題,我們可以使用boolin函數先將cstring轉換為boolean類型,然後在進行text的轉換:
## 無法直接轉換演示
postgres=# select boolout('1')::text;
ERROR:  cannot cast type cstring to text
LINE 1: select boolout('1')::text;

## 可轉換方式演示
postgres=# select boolin(boolout('1'::bool))::text;
 boolin
--------
 true
(1 row)

End~

最後更新:2017-07-10 06:32:12

  上一篇:go  賽思互動:大企業孜孜追求的並非效率,而是生產力
  下一篇:go  數據盤最佳實踐 - 玩轉ECS數據盤計費方式轉換