如何执行填充功能

时间:2019-12-30 08:35:58

标签: sql oracle

SELECT STUFF('SQL Tutorial', 1, 3, 'HTML');

找不到关键字错误

  

错误:ORA-00923

2 个答案:

答案 0 :(得分:0)

一种选择是使用两个$调用。我不会说MS SQL Server,所以我搜索了eval;有一个例子说

substr

返回

stuff
结果为

因此:

stuff('GeeksForGeeks', 5, 3, '1234')

在您的情况下,只有一个Geek1234rGeeks

SQL> with test (col) as
  2    (select 'GeeksForGeeks' from dual)
  3    --       1234567890123
  4    --           xxx
  5    --       Geek1234rGeeks   5, 3, 1234
  6  select substr(col, 1, 5) || '1234' ||
  7         substr(col, 8) result
  8  From test;

RESULT
---------------
Geeks1234rGeeks

SQL>

基本上,它依赖 ...


或者,如果您编写自己的函数,则可能看起来像这样:

substr

答案 1 :(得分:0)

使用this tutorial中的STUFF函数的定义

我已经在Oracle中创建了如下相同的函数:

SQL> CREATE OR REPLACE FUNCTION STUFF (
  2      INPUT_STRING             VARCHAR2,
  3      START_POSITION           NUMBER,
  4      LENGTH_                  NUMBER,
  5      REPLACE_WITH_SUBSTRING   VARCHAR
  6  ) RETURN VARCHAR2 AS
  7  BEGIN
  8      IF START_POSITION > LENGTH(INPUT_STRING) OR START_POSITION <= 0 OR LENGTH_ < 0 THEN
  9          RETURN NULL;
 10      END IF;
 11
 12      IF LENGTH_ > LENGTH(INPUT_STRING) THEN
 13          RETURN REPLACE_WITH_SUBSTRING;
 14      END IF;
 15      RETURN SUBSTR(INPUT_STRING, 1, START_POSITION - 1)
 16             || REPLACE_WITH_SUBSTRING
 17             || SUBSTR(INPUT_STRING, LENGTH_ + START_POSITION);
 18
 19  END;
 20  /

Function created.

上述教程链接中的一些示例在oracle中也使用此功能提供了相同的输出。

SQL> SELECT STUFF('SQL Tutorial', 1, 3, 'SQL Server') RESULT FROM DUAL;

RESULT
--------------------------------------------------------------------------------
SQL Server Tutorial

SQL> SELECT STUFF('1230', 3, 0, ':') AS FORMATTED_TIME FROM DUAL;

FORMATTED_TIME
--------------------------------------------------------------------------------
12:30

SQL> SELECT STUFF(STUFF('03102019', 3, 0, '/'), 6, 0, '/') FORMATTED_DATE FROM DUAL;

FORMATTED_DATE
--------------------------------------------------------------------------------
03/10/2019

SQL>

最后,尝试使用问题中询问的参数:

SQL> SELECT STUFF('SQL Tutorial', 1, 3, 'HTML') AS YOUR_RESULT FROM DUAL;

YOUR_RESULT
--------------------------------------------------------------------------------
HTML Tutorial

SQL>

干杯!