Замена нужных номеров в ячейке - PullRequest
0 голосов
/ 14 мая 2019

Мне нужно заменить ячейку, если альбом ученика содержит «357» номеров для «000». Формат столбца - НОМЕР. Номер альбома может выглядеть так: 90432,90709,83570, поэтому эти номера могут быть «внутри». Для номера 83570 я должен напечатать 80000.

Я пытался так:

select student.imie,
    student.nazwisko,
    case
        when student.nralbumu like '%357%' then replace(nralbumu, '%357%', '%000%')
        else student.nralbumu
    end album
from student

но это не сработало. Я получил ошибку вроде:

00932. 00000 - «несовместимые типы данных: ожидаемый% s получил% s»

enter image description here

enter image description here

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Используйте REPLACE напрямую, поскольку ничего не произойдет, если число не содержит 357

SELECT TO_NUMBER(REPLACE(TO_CHAR(nralbumu), '357','000'))
FROM STUDENT

или если вам не нужен результат в виде числа

SELECT REPLACE(TO_CHAR(nralbumu), '357','000')
FROM STUDENT
0 голосов
/ 14 мая 2019

Попробуйте это для SQL Server,

select student.imie,
    student.nazwisko,
    CAST(case
        when CAST(student.nralbumu AS VARCHAR) like '%357%' then replace(CAST( student.nralbumu AS VARCHAR), '357', '000')
        else CAST(student.nralbumu AS VARCHAR)
    end as NUMERIC)  album
from student

Для Oracle, то же самое относится. Просто приведите к Varchar и вернитесь к номеру

Так что, в основном, если вы используете Oracle, вы должны получить желаемый результат.

SELECT   CAST(
    case
        when CAST(904329070983570 AS VARCHAR2(50)) like '%357%' then replace(CAST(904329070983570 AS VARCHAR2(50)), '357', '000')
        else CAST(904329070983570 AS VARCHAR2(50))
    end AS number(10, 0))
FROM dual;
...