替换单元格中的所需数字

时间:2019-05-14 13:24:38

标签: sql oracle case oracle-sqldeveloper

如果学生相册包含“ 000”的“ 357”数字,我需要替换单元格。 列的格式为NUMBER。 号码簿看起来可能像这样: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 个答案:

答案 0 :(得分:1)

直接使用REPLACE,因为如果该数字不包含357则什么也不会发生

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

或者如果您不需要结果作为数字

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

答案 1 :(得分:0)

针对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;