按照固定模式将 table 个值翻译成文本

Translate table values to text following a fixed pattern

我们使用软件来存储金融元素的组合。这些元素在某些组合中是允许的。这些组合的例外是前端中的 SQL-like 语句,并在数据库中保存为数值 table 如下例:

+------+------+------+------+------+
| Col1 | Col2 | Col3 | Col4 | Col5 |
+------+------+------+------+------+
| 1    | 2    | 4    | 5    | 1    |
+------+------+------+------+------+
| -1   | 2    | 6    | 4    | 5    |
+------+------+------+------+------+
| 1    | 2    | 5    | 7    | 1    |
+------+------+------+------+------+

我想将这些数值转换回 SQL 语句,如下例所示:

+------+-----------+------+-----------+------+-----------+------+-----------+------+-----------+
| Col1 | Col1Trans | Col2 | Col2Trans | Col3 | Col3Trans | Col4 | Col4Trans | Col5 | Col5Trans |
+------+-----------+------+-----------+------+-----------+------+-----------+------+-----------+
| 1    | (         | 2    | SELECT    | 4    | CODE      | 5    | LIKE      | 1    | *         |
+------+-----------+------+-----------+------+-----------+------+-----------+------+-----------+
| -1   |           | 2    | SELECT    | 6    | NUMBER    | 4    | =         | 5    | AND       |
+------+-----------+------+-----------+------+-----------+------+-----------+------+-----------+
| 1    | (         | 2    | SELECT    | 5    | TOOL      | 7    | <>        | 1    | *         |
+------+-----------+------+-----------+------+-----------+------+-----------+------+-----------+

每一列的数值都不同,所以我只能想象使用很多我怀疑是有效的 case...when 语句。我不想创建 tables 来保存翻译值。有没有办法用数组来做到这一点?

是否有任何代码示例可以轻松地遍历 table/columns 并翻译其中的内容?

避免这么多 case whendecode 等的最好方法是使用 with as 子句,如下所示:

With col1trans (value, translation) as 
(Select 1, '(' from dual union all
Select -1, null from dual),
Col2trans (value, translation) as 
(Select 2, 'SELECT' from dual)
..
... till col5trans
Select m.col1, t1.translation as col1trans,
.... till m.col5, t5.translation
From your_table m join col1trans t1 m.col1=t1.value
join col2trans t2 m.col2=t2.value 
... till col5trans

干杯!!

您可以使用下面的代码,并根据需要添加更多的 case 语句。

SELECT Col1
    ,CASE 
        WHEN Col1 = 1 THEN '('
        ELSE '' END AS Col1Trans
    ,Col2
    ,CASE 
        WHEN Col2 = 2 THEN 'SELECT'
        END AS Col2Trans
    ,Col3
    ,CASE 
        WHEN Col3 = 4 THEN 'CODE'
        WHEN Col3 = 6 THEN 'NUMBER'
        WHEN Col3 = 5 THEN 'TOOL'
        END AS Col3Trans
    ,Col4
    ,CASE 
        WHEN Col4 = 5 THEN 'LIKE'
        WHEN Col4 = 4 THEN '='
        WHEN Col4 = 7 THEN '<>'
        END AS Col4Trans
    ,Col5
    ,CASE 
        WHEN Col5 = 1 THEN '*'
        WHEN Col5 = 5 THEN 'AND'
        END AS Col5Trans