我有一个名为MYTABLE
的oracle表,其中包含prog_model
列。
我正在尝试CASE
(如果是oracle)根据字符串长度在我的prog_model
中插入一些空格。
我的问题是我得到了ORA-00936 error missing expression ligne 3 c18
我不知道它来自于SQL中的超级菜鸟,有什么想法吗?
这是我的.sql:
SELECT prog_model,
CASE Length(prog_model)
WHEN 11 THEN Insert(' ',2,3,prog_model)
WHEN 12 THEN Insert(' ',2,3,prog_model)
WHEN 13 THEN Insert(' ',2,3,prog_model)
END
FROM MYTABLE;
编辑:
基本上在prog_model
我总是有一个11到14个字符的字符串:
如果11个字符,“ABCEFGHIJKL” - > “ABC_ _ _EFGHIKL”
如果有12个字符,“ABCEFGHIJKLM” - > “ABC_ _EFGHIJKLM”
答案 0 :(得分:3)
我不知道Oracle中的insert()
功能。但是在MySQL中有一个。您的错误可能是因为insert
是关键字。
如果你想要开头的空格,你只能使用lpad()
function:
select lpad(prog_model, 14, ' ')
你似乎想要他们在中间。我认为这就像:
select substr(prog_model, 1, 3) || lpad(substr(prog_model, 4), 11, ' ')
我可能在第二部分有错误。如果没有样本数据,找出确切的长度很难。
答案 1 :(得分:0)
这个怎么样(尝试三种方法,包括戈登的substr
/ lpad
):
with demo (prog_model) as
( select 'ABCEFGHIJKL' from dual union all
select 'ABCEFGHIJKLM' from dual union all
select 'ABCEFGHIJKLMN' from dual union all
select 'ABCEFGHIJKLMNO' from dual )
select prog_model
, regexp_replace(prog_model,'(...)(.*$)', '\1'|| rpad(' ',14 - length(prog_model)) ||'\2') as result1
, case length(prog_model)
when 11 then regexp_replace(prog_model,'(...)(.*$)', '\1 \2')
when 12 then regexp_replace(prog_model,'(...)(.*$)', '\1 \2')
when 13 then regexp_replace(prog_model,'(...)(.*$)', '\1 \2')
when 14 then prog_model
end as result2
, substr(prog_model,1,3) || lpad(substr(prog_model,4),11) as result3
from demo;
PROG_MODEL RESULT1 RESULT2 RESULT3
-------------- -------------- -------------- --------------
ABCEFGHIJKL ABC EFGHIJKL ABC EFGHIJKL ABC EFGHIJKL
ABCEFGHIJKLM ABC EFGHIJKLM ABC EFGHIJKLM ABC EFGHIJKLM
ABCEFGHIJKLMN ABC EFGHIJKLMN ABC EFGHIJKLMN ABC EFGHIJKLMN
ABCEFGHIJKLMNO ABCEFGHIJKLMNO ABCEFGHIJKLMNO ABCEFGHIJKLMNO