如果学生相册包含“ 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”
答案 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;