Как мне сопоставить числа с их строковыми эквивалентами в Perl? - PullRequest
0 голосов
/ 04 августа 2009

Я пишу сценарий, используя DBI для выполнения запроса на выборку к базе данных Oracle. Я успешно смог собрать данные, но мне нужна помощь, чтобы изменить вывод.

Ниже приведен пример вывода.

Type
2
6

Я хочу отобразить 2 => Хорошо и 6 => Плохо

Может кто-нибудь предложить мне код Perl для сопоставления вывода?

Ответы [ 4 ]

6 голосов
/ 04 августа 2009
# 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'
5 голосов
/ 04 августа 2009

Обычно самым простым способом является непосредственное изменение значений, выводимых SQL-запросом. С Oracle вы можете использовать DECODE .

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

Стандартный способ SQL состоит в использовании условного выражения CASE. Это немного более многословно, но более мощно и более портативно. Это работает, например, в Oracle , PostgreSQL и MS-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 . Пример кода довольно тривиален и хорошо документирован в приведенной мною ссылке.

0 голосов
/ 05 августа 2009

$ inWords = ("", "очень хорошо", "хорошо", "удовлетворительно", "достаточно", "плохо", "плохо") [$ number];

0 голосов
/ 05 августа 2009

Создайте таблицу поиска в вашей РСУБД, которая отображает 2 на Хороший и 6 на Плохой. Создайте INNER JOIN (или LEFT JOIN, если вы предполагаете наличие значений, которые не будут соответствовать поиску) с вашим оператором SQL (или создайте VIEW, который возвращает таблицы JOINed). Попытка использовать операторы Perl или SQL SELECT для замены дизайна базы данных, вероятно, плохая идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...