如何使用Firebird SQL从字符串中提取字母

时间:2015-02-25 08:57:07

标签: firebird

我想实现一个从firebird中的varchar中提取字母的存储过程。

示例:

v_accountno' is of type varchar(50) and has the following values 
accountno 1 - 000023208821 
accountno 2 - 390026826850868140H
accountno 3 - 0700765001003267KAH

我想从v_accountno中提取字母并将其输出到o_letter。 在我的示例中:o_letter将为帐号2存储H,为帐号3存储KAH

我尝试了以下存储过程,这显然不适用于accountno 3.(请帮助)。

  CREATE OR ALTER PROCEDURE SP_EXTRACT_LETTER
  returns (
      o_letter varchar(50))
  as
  declare variable v_accountno varchar(50);
  begin
       v_accountno = '390026826850868140H';

       if (not (:v_accountno similar to '[[:DIGIT:]]*')) then
       begin
           -- My SP won't work in for accountno 3 '0700765001003267KAH'
           v_accountno = longsubstr(v_accountno, strlen(v_accountno), strlen(v_accountno));
           o_letter = v_accountno;
       end

      suspend;
  end

2 个答案:

答案 0 :(得分:2)

一种解决方案是用空字符串替换每个数字,如:

o_letter  = REPLACE(v_accountno, '0', '')
o_letter  = REPLACE(o_letter, '1', '')
o_letter  = REPLACE(o_letter, '2', '')
...

答案 1 :(得分:1)

从 Firebird 3 开始,您可以使用 substring,使用其正则表达式工具(使用 similar 子句):

substring(v_accountno similar '[[:digit:]]*#"[[:alpha:]]*#"' escape '#')

另见this dbfiddle