Oracle SQL неверный аргумент - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь добавить еще один MAX(DECODE(SPØRGSMÅL_ID, 101, KARAKTER)) к этому утверждению, но дает мне неверный аргумент? В чем проблема?

Это работает и является оригинальным запросом

MAX(DECODE(SPØRGSMÅL_ID, 47, KARAKTER)) AS SP1,
to_number(concat(concat(MAX(DECODE(SPØRGSMÅL_ID, 141, KARAKTER)),
MAX(DECODE(SPØRGSMÅL_ID, 161, KARAKTER))),MAX(DECODE(SPØRGSMÅL_ID, 121, KARAKTER)))) AS SP2

Это не работает и выдает ошибку неверного аргумента

MAX(DECODE(SPØRGSMÅL_ID, 47, KARAKTER)) AS SP1,
to_number(concat(concat(MAX(DECODE(SPØRGSMÅL_ID, 141, KARAKTER)),
MAX(DECODE(SPØRGSMÅL_ID, 161, KARAKTER))),
MAX(DECODE(SPØRGSMÅL_ID, 121, KARAKTER))), MAX(DECODE(SPØRGSMÅL_ID, 101, KARAKTER)) AS SP2

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Вы пропускаете вызов concat(), как уже отмечалось, но в любом случае их вложение неудобно, и, как вы уже видели, делать ошибки ошибочно.

Проще использовать оператор конкатенации:

MAX(DECODE(SPØRGSMÅL_ID, 47, KARAKTER)) AS SP1,
to_number(
     MAX(DECODE(SPØRGSMÅL_ID, 141, KARAKTER))
  || MAX(DECODE(SPØRGSMÅL_ID, 161, KARAKTER))
  || MAX(DECODE(SPØRGSMÅL_ID, 121, KARAKTER))
  || MAX(DECODE(SPØRGSMÅL_ID, 101, KARAKTER))
) AS SP2

Объединение значений в строку, которую вы затем передаете в to_number(), выглядит немного странно в любом случае, но без просмотра примеров данных трудно сказать, имеет ли это смысл для всего, что вы делаете с результатом. Имя столбца KARAKTER предполагает, что вы, возможно, составляете строку букв, а не цифр - или, по крайней мере, не все цифры - в результате выдается «ORA-01722: неверный номер».

0 голосов
/ 02 ноября 2018

Это потому, что вы добавили MAX(DECODE(SPØRGSMÅL_ID, 101, KARAKTER)) в качестве второго параметра TO_NUMBER.

Определение столбца SP2 до изменения выглядит следующим образом:

to_number(
    concat(
        concat(
            MAX( DECODE(SPØRGSMÅL_ID, 141, KARAKTER) ),
            MAX( DECODE(SPØRGSMÅL_ID, 161, KARAKTER) )
        ),
        MAX( DECODE(SPØRGSMÅL_ID, 121, KARAKTER) )
    )
) AS SP2

Вы, если хотите добавить дополнительный символ, должны добавить третье CONCAT выполнение, например:

to_number(
    concat(
        concat(
            concat(
                MAX( DECODE(SPØRGSMÅL_ID, 141, KARAKTER) ),
                MAX( DECODE(SPØRGSMÅL_ID, 161, KARAKTER) )
            ),
            MAX( DECODE(SPØRGSMÅL_ID, 121, KARAKTER) )
        ),
        MAX( DECODE(SPØRGSMÅL_ID, 101, KARAKTER) )
    )
) AS SP2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...