【问题标题】:How to extract substrings from strings in Oracle with PL/SQL?如何使用 PL/SQL 从 Oracle 中的字符串中提取子字符串?
【发布时间】:2014-02-28 12:45:11
【问题描述】:

我是 SQL 新手,所以这个问题可能是相当基本的,但我花了相当多的时间在它上面没有成功。

给了我一个需要修改的 SQL 代码块。此块当前从文本索引中提取所有标记(“单词”)。我需要做的是遍历每个令牌并(1)从中提取给定长度N的所有字符N-gram,然后(2)将它们插入表中。

所以如果一个令牌是abcdfN=3,那么我需要提取abcbcdcdf

我正在努力解决 (1)。

我在 Oracle 的 PL/SQL 中执行此操作:版本 11.2.0.3.0

我现在拥有的是这样的:

CREATE OR REPLACE PROCEDURE extract_ngrams
AS
     tokens ctx_doc.token_tab;
     w VARCHAR2(255);
     NgramLen NUMBER;
     ngr VARCHAR(10);
BEGIN

-- extract all tokens ("words")
CTX_DOC.TOKENS(myindex,textkey,tokens);

NgramLen := 3;

FOR i IN tokens.FIRST..tokens.LAST LOOP
  w := tokens(i).token;
  dbms_output.put_line(w);
  -- Use SUBSTRING + LEN or some other approach to extract Ngrams of length=NgramLen
  -- insert each Ngram into a table
end loop;

END;
/

FOR 循环与SUBSTRINGLEN 和/或任何其他适当的函数结合起来以在循环中将ngrams 提取到ngr 中的正确方法是什么? 987654332@?

谢谢!

【问题讨论】:

    标签: sql oracle plsql substring


    【解决方案1】:

    这是您想要的示例:

    FOR idx IN 1..(LENGTH(w)-NgramLen+1)
      LOOP
        -- do what you want here
        DBMS_OUTPUT.PUT_LINE(SUBSTR(w,idx,NgramLen));
      END LOOP;
    

    别忘了声明idx NUMBER;

    【讨论】:

      猜你喜欢
      • 2019-07-23
      • 1970-01-01
      • 2021-01-29
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多