SQLHUB 4.1+ 提供 CREATE DICTIONARY 功能,將「編碼 ↔ 名稱」對照表封裝為可重用物件,支援:
MAP() 函數編碼轉換、DIC() 函數取得字典資料SERIAL、ENUM、ROWSET 建構CREATE DICTIONARY gbk2big AS
BEGIN
DECLARE gbk VARCHAR(4000) := '啊阿埃挨哎唉哀皚癌藹矮艾...'; -- 完整簡體字表
DECLARE big5 VARCHAR(4000) := '啊阿埃挨哎唉哀皚癌藹矮艾...'; -- 對應繁體字表
SELECT a.f1 AS gbk, b.f1 AS big5
FROM SPLITN(gbk, 1) a LINE JOIN SPLITN(big5, 1) b;
END;
SPLITN(str, 1):將字串按單字元拆分為資料列集合 (每列欄位 f1)。LINE JOIN:按行號一對一連接兩個集合,產生編碼-名稱對照。CREATE OR REPLACE PROCEDURE gbk2big(str VARCHAR(4000)) AS
BEGIN
-- 1. 將輸入字串拆分為單字元集合
-- 2. MAP 查字典取得對應繁體字 (找不到保留原字)
-- 3. STRSUM 合併為單一字串
-- 4. REPLACE 移除 MAP 可能產生的分隔符
RETURN REPLACE(MAP('gbk2big', (SELECT STRSUM(f1, '') FROM SPLITN(str, 1)), ''), '', '');
END;
SELECT gbk2big('人閒桂花落,夜靜春山空。月出驚山鳥,時鳴春澗中。');
-- 輸出:人閒桂花落,夜靜春山空。月出驚山鳥,時鳴春澗中。 (繁體顯示)
| 函數 | 用途 |
|---|---|
SPLITN(str, n) | 將字串按 n 字元分組拆分為資料列集合 |
LINE JOIN | 兩集合按行號順序一對一連接 (類似 ZIP) |
MAP(dict, code, default) | 字典查詢:傳入編碼回傳名稱,找不到回傳 default |
STRSUM(col, delim) | 彙總欄位值為單一字串,可指定分隔符 |
REPLACE(str, old, new) | 字串取代 |