将一些空格插入到字符串oracle数据库中

时间:2018-02-15 11:19:12

标签: sql oracle

我有一个名为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”

2 个答案:

答案 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