这是一个恶魔般的问题,由选择打破数据库设计的基本规则之一的人制造:列的内容应该是一个单一的、不可分割的值。
最好的解决方案是修改表以包含 value_descr = "AMOUNT"、value = 15000000.00 和 value_type = "USD",并确保传入数据以这种方式存储。说起来容易做起来难,我知道。
否则,您将不得不编写一个解析字符串并返回其数字部分的 UDR。这在 SPL 中是可行的,但可能非常慢。类似于以下内容:
CREATE PROCEDURE extract_value (inp VARCHAR(255)) RETURNING DECIMAL;
DEFINE s SMALLINT;
DEFINE l SMALLINT;
DEFINE i SMALLINT;
FOR i = 1 TO LENGTH(inp)
IF SUBSTR(inp, i, 1) = "<" THEN
LET s = i + 1;
ELIF SUBSTR(inp, i, 1) = ">" THEN
LET l = i - s - 1;
RETURN SUBSTR(inp, s, l)::DECIMAL;
END IF;
END FOR;
RETURN NULL::DECIMAL; -- could not parse out number
END PROCEDURE;
...您将这样执行:
SELECT extract_value(p.value)
FROM tablename AS p
WHERE p.value LIKE 'AMOUNT%'
注意:该程序在我对 11.5 版的有限测试中编译并产生输出。没有进行验证以确保 <>
解析之间的字符串为数字。我手边没有 9.4 的实例,但我没有使用 9.4 TTBOMK 中没有的任何功能。