淺談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))

錯誤的原因是GP不支持將cstring轉換成其他的數據類型(如下代碼顯示)

Advertisements

gpadmin=# select boolout('1')::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; $$;

有朋友說,你開頭的錯誤還是不能解決啊!姑且別急,接著看 ↓

Advertisements

針對cstring無法轉換成text的問題,我們可以使用boolin函數先將cstring轉換為boolean類型,然後在進行text的轉換:

## 無法直接轉換演示

End~

Advertisements

你可能會喜歡