如何在Perl中将数字映射到它们的字符串等价物?

时间:2009-08-04 09:29:47

标签: perl

我正在使用DBI编写脚本来执行对Oracle数据库的选择查询。我已成功捕获数据,但我需要帮助才能更改输出。

以下是示例输出。

Type
2
6

我想显示2 => Good和6 => Bad

有人可以建议我使用Perl代码来映射输出吗?

4 个答案:

答案 0 :(得分:6)

# Create a hash of the values you want to output
my %human_text = (2 => 'Good', 6 => 'Bad');

# and then access the hash values like this:
print $human_text{2}; #will output 'Good'
print $human_text{6}; #will output 'Bad'

答案 1 :(得分:5)

通常最简单的方法是直接更改SQL查询输出的值。使用Oracle,您可以使用DECODE

SELECT DECODE(MY_TYPE, 2, 'TWO', 6, 'SIX', 'DEFAULT_VALUE') FROM MY_TABLE

标准的SQL方法是使用CASE条件表达式。它更冗长,但更强大,更便携。例如,它适用于OraclePostgreSQLMS-SQL

SELECT 
    CASE 
        WHEN MY_TYPE = 2 THEN 'TWO'
        WHEN MY_TYPE = 6 THEN 'SIX'
        ELSE 'DEFAULT_VALUE'
    END CASE 
FROM MY_TABLE

如果您仍想在Perl中执行此操作,则可以创建Hash。代码示例非常简单,并且在我提供的链接中有详细记录。

答案 2 :(得分:0)

在RDBMS中创建一个查找表,其中2表示Good,6表示Bad。如果您预期具有与查找不匹配的值,则创建一个INNER JOIN(或LEFT JOIN)与您的SQL语句(或创建一个返回JOINed表的VIEW)。尝试使用Perl或SQL SELECT语句来替换数据库设计可能是一个坏主意。

答案 3 :(得分:0)

$ inWords =(“”,“非常好”,“好”,“满意”,“足够”,“差”,“差”)[$ number];