PL/SQL 将字符串转换为数字

PL/SQL convert string to number

我想将字符串转换为数字以获得校验和。该字符串由 universityCode || 组成' ' ||国家代码 || ' ' ||学号。

示例字符串可以是:

TUE NL 123456789

我必须将此示例字符串转换为数字,并使用 TO_NUMBER 函数进行了尝试,但我一直收到错误消息。

这是我在 PL/SQL 中创建(或替换)函数的代码:

-- Een functie om een International Student Identification Number (ISIN) te genereren
CREATE OR REPLACE FUNCTION generateISIN(
  countryCode Country.Code%TYPE,
  universityCode University.Code%TYPE,
  studentNumber VARCHAR2
)
RETURN VARCHAR2
AS
  newStudentNumber VARCHAR2(50) := '';
BEGIN
-- Zorgen voor de goede waarde voordat we de checksum beginnen
newStudentNumber := universityCode || ' ' || countryCode || ' ' || studentNumber;
-- newStudentNumber omzetten naar enkel getallen
newStudentNumber := TO_NUMBER(newStudentNumber);
-- Spaties weghalen in newStudentNumber
newStudentNumber := TRIM(' ' FROM newStudentNumber);
  RETURN newStudentNumber;
END;
/

有人可以帮我解决我的问题吗?非常感谢!

您似乎应该将 may/will 包含字母字符的初始字符串转换为另一个仅包含数字字符的字符串。然后你还有一些其他的事情要做,但以下可能会让你开始:

FUNCTION CONVERT_STR_TO_NUMERIC(pin_Str IN VARCHAR2)
  RETURN VARCHAR2
IS
  strResult  VARCHAR2(32767);
  c          CHAR(1);
BEGIN
  FOR i IN 1..LENGTH(pin_Str) LOOP
    c := SUBSTR(pin_Str, i, 1);

    strResult := strResult || CASE c
                                WHEN 'A' THEN '16'
                                WHEN 'B' THEN '17'
                                WHEN 'C' THEN '18'
                                WHEN 'D' THEN '19'
                                WHEN 'E' THEN '20'
                                WHEN 'F' THEN '21'
                                WHEN 'G' THEN '22'
                                WHEN 'H' THEN '23'
                                WHEN 'I' THEN '24'
                                WHEN 'J' THEN '25'
                                WHEN 'K' THEN '26'
                                WHEN 'L' THEN '27'
                                WHEN 'M' THEN '28'
                                WHEN 'N' THEN '29'
                                WHEN 'O' THEN '30'
                                WHEN 'P' THEN '31'
                                WHEN 'Q' THEN '32'
                                WHEN 'R' THEN '33'
                                WHEN 'S' THEN '34'
                                WHEN 'T' THEN '35'
                                WHEN 'U' THEN '36'
                                WHEN 'V' THEN '37'
                                WHEN 'W' THEN '38'
                                WHEN 'X' THEN '39'
                                WHEN 'Y' THEN '40'
                                WHEN 'Z' THEN '41'
                                ELSE c
                              END;
  END LOOP;

  RETURN strResult;
END CONVERT_STR_TO_NUMERIC;

例如,如果您使用测试字符串 'TUE NL 123456789' 调用上面的代码,它会生成“353620 2927 123456789”。

你能不能只用

SQL> select ora_hash( "mycode" )  from dual;

ORA_HASH('mycode')
----------------------
            2519249214

我找到了这个并且它完美运行:

string VARCHAR2(50) := '';
temp VARCHAR2(50) := '';

for i in 1..length(string) loop
        temp := temp||(ascii(substr(string,i,1))-ascii('A')+16);  
     end loop;