create procedure lib_string_sub_pre15 ( strg_in varchar( 32765), strg_beg smallint, strg_len smallint) returns ( strg_out varchar( 32765)) as declare variable strg_cmp varchar( 32765); declare variable pos smallint; declare variable chr char(1); begin /* contributed by Lucas Franzen no need for dbms support of substring sql command functions on older interbase / firebird versions (pre 1.5) caution: the characters in the comparison part of the code are not converted to their corresponding html sequences, so check them before compilation */ if ( (strg_in is null) or (strg_beg is null) or (strg_beg <= 0) or (strg_len is null) or (strg_len <= 0)) then strg_out = null; else begin strg_out = ''; strg_cmp = ''; pos = 1; while (pos < strg_beg) do begin strg_cmp = strg_cmp || '_'; pos = pos + 1; end while (pos < strg_beg + strg_len) do begin if (strg_in like strg_cmp || ' %') then chr = ' '; else if (strg_in like strg_cmp || '!%') then chr = '!'; else if (strg_in like strg_cmp || '"%') then chr = '"'; else if (strg_in like strg_cmp || '#%') then chr = '#'; else if (strg_in like strg_cmp || '$%') then chr = '$'; else if (strg_in like strg_cmp || '&%') then chr = '&'; else if (strg_in like strg_cmp || '''%') then chr = ''''; else if (strg_in like strg_cmp || '(%') then chr = '('; else if (strg_in like strg_cmp || ')%') then chr = ')'; else if (strg_in like strg_cmp || '*%') then chr = '*'; else if (strg_in like strg_cmp || '+%') then chr = '+'; else if (strg_in like strg_cmp || ',%') then chr = ','; else if (strg_in like strg_cmp || '-%') then chr = '-'; else if (strg_in like strg_cmp || '.%') then chr = '.'; else if (strg_in like strg_cmp || '/%') then chr = '/'; else if (strg_in like strg_cmp || '0%') then chr = '0'; else if (strg_in like strg_cmp || '1%') then chr = '1'; else if (strg_in like strg_cmp || '2%') then chr = '2'; else if (strg_in like strg_cmp || '3%') then chr = '3'; else if (strg_in like strg_cmp || '4%') then chr = '4'; else if (strg_in like strg_cmp || '5%') then chr = '5'; else if (strg_in like strg_cmp || '6%') then chr = '6'; else if (strg_in like strg_cmp || '7%') then chr = '7'; else if (strg_in like strg_cmp || '8%') then chr = '8'; else if (strg_in like strg_cmp || '9%') then chr = '9'; else if (strg_in like strg_cmp || ':%') then chr = ':'; else if (strg_in like strg_cmp || ';%') then chr = ';'; else if (strg_in like strg_cmp || '<%') then chr = '<'; else if (strg_in like strg_cmp || '=%') then chr = '='; else if (strg_in like strg_cmp || '>%') then chr = '>'; else if (strg_in like strg_cmp || '?%') then chr = '?'; else if (strg_in like strg_cmp || '@%') then chr = '@'; else if (strg_in like strg_cmp || 'A%') then chr = 'A'; else if (strg_in like strg_cmp || 'B%') then chr = 'B'; else if (strg_in like strg_cmp || 'C%') then chr = 'C'; else if (strg_in like strg_cmp || 'D%') then chr = 'D'; else if (strg_in like strg_cmp || 'E%') then chr = 'E'; else if (strg_in like strg_cmp || 'F%') then chr = 'F'; else if (strg_in like strg_cmp || 'G%') then chr = 'G'; else if (strg_in like strg_cmp || 'H%') then chr = 'H'; else if (strg_in like strg_cmp || 'I%') then chr = 'I'; else if (strg_in like strg_cmp || 'J%') then chr = 'J'; else if (strg_in like strg_cmp || 'K%') then chr = 'K'; else if (strg_in like strg_cmp || 'L%') then chr = 'L'; else if (strg_in like strg_cmp || 'M%') then chr = 'M'; else if (strg_in like strg_cmp || 'N%') then chr = 'N'; else if (strg_in like strg_cmp || 'O%') then chr = 'O'; else if (strg_in like strg_cmp || 'P%') then chr = 'P'; else if (strg_in like strg_cmp || 'Q%') then chr = 'Q'; else if (strg_in like strg_cmp || 'R%') then chr = 'R'; else if (strg_in like strg_cmp || 'S%') then chr = 'S'; else if (strg_in like strg_cmp || 'T%') then chr = 'T'; else if (strg_in like strg_cmp || 'U%') then chr = 'U'; else if (strg_in like strg_cmp || 'V%') then chr = 'V'; else if (strg_in like strg_cmp || 'W%') then chr = 'W'; else if (strg_in like strg_cmp || 'X%') then chr = 'X'; else if (strg_in like strg_cmp || 'Y%') then chr = 'Y'; else if (strg_in like strg_cmp || 'Z%') then chr = 'Z'; else if (strg_in like strg_cmp || '[%') then chr = '['; else if (strg_in like strg_cmp || '\%') then chr = '\'; else if (strg_in like strg_cmp || ']%') then chr = ']'; else if (strg_in like strg_cmp || '^%') then chr = '^'; else if (strg_in like strg_cmp || '`%') then chr = '`'; else if (strg_in like strg_cmp || 'a%') then chr = 'a'; else if (strg_in like strg_cmp || 'b%') then chr = 'b'; else if (strg_in like strg_cmp || 'c%') then chr = 'c'; else if (strg_in like strg_cmp || 'd%') then chr = 'd'; else if (strg_in like strg_cmp || 'e%') then chr = 'e'; else if (strg_in like strg_cmp || 'f%') then chr = 'f'; else if (strg_in like strg_cmp || 'g%') then chr = 'g'; else if (strg_in like strg_cmp || 'h%') then chr = 'h'; else if (strg_in like strg_cmp || 'i%') then chr = 'i'; else if (strg_in like strg_cmp || 'j%') then chr = 'j'; else if (strg_in like strg_cmp || 'k%') then chr = 'k'; else if (strg_in like strg_cmp || 'l%') then chr = 'l'; else if (strg_in like strg_cmp || 'm%') then chr = 'm'; else if (strg_in like strg_cmp || 'n%') then chr = 'n'; else if (strg_in like strg_cmp || 'o%') then chr = 'o'; else if (strg_in like strg_cmp || 'p%') then chr = 'p'; else if (strg_in like strg_cmp || 'q%') then chr = 'q'; else if (strg_in like strg_cmp || 'r%') then chr = 'r'; else if (strg_in like strg_cmp || 's%') then chr = 's'; else if (strg_in like strg_cmp || 't%') then chr = 't'; else if (strg_in like strg_cmp || 'u%') then chr = 'u'; else if (strg_in like strg_cmp || 'v%') then chr = 'v'; else if (strg_in like strg_cmp || 'w%') then chr = 'w'; else if (strg_in like strg_cmp || 'x%') then chr = 'x'; else if (strg_in like strg_cmp || 'y%') then chr = 'y'; else if (strg_in like strg_cmp || 'z%') then chr = 'z'; else if (strg_in like strg_cmp || '{%') then chr = '{'; else if (strg_in like strg_cmp || '|%') then chr = '|'; else if (strg_in like strg_cmp || '}%') then chr = '}'; else if (strg_in like strg_cmp || '~%') then chr = '~'; else if (strg_in like strg_cmp || '£%') then chr = '£'; else if (strg_in like strg_cmp || '²%') then chr = '²'; else if (strg_in like strg_cmp || '³%') then chr = '³'; else if (strg_in like strg_cmp || '¹%') then chr = '¹'; else if (strg_in like strg_cmp || '´%') then chr = '´'; else if (strg_in like strg_cmp || 'µ%') then chr = 'µ'; else if (strg_in like strg_cmp || '¶%') then chr = '¶'; else if (strg_in like strg_cmp || '§%') then chr = '§'; else if (strg_in like strg_cmp || 'ä%') then chr = 'ä'; else if (strg_in like strg_cmp || 'ö%') then chr = 'ö'; else if (strg_in like strg_cmp || 'ü%') then chr = 'ü'; else if (strg_in like strg_cmp || 'Ä%') then chr = 'Ä'; else if (strg_in like strg_cmp || 'Ö%') then chr = 'Ö'; else if (strg_in like strg_cmp || 'Ü%') then chr = 'Ü'; else if (strg_in like strg_cmp || 'ß%') then chr = 'ß'; else if (strg_in like strg_cmp || 'Á%') then chr = 'Á'; else if (strg_in like strg_cmp || 'É%') then chr = 'É'; else if (strg_in like strg_cmp || 'Í%') then chr = 'Í'; else if (strg_in like strg_cmp || 'Ó%') then chr = 'Ó'; else if (strg_in like strg_cmp || 'Ú%') then chr = 'Ú'; else if (strg_in like strg_cmp || 'á%') then chr = 'á'; else if (strg_in like strg_cmp || 'é%') then chr = 'é'; else if (strg_in like strg_cmp || 'í%') then chr = 'í'; else if (strg_in like strg_cmp || 'ó%') then chr = 'ó'; else if (strg_in like strg_cmp || 'ú%') then chr = 'ú'; else if (strg_in like strg_cmp || 'À%') then chr = 'À'; else if (strg_in like strg_cmp || 'È%') then chr = 'È'; else if (strg_in like strg_cmp || 'Ì%') then chr = 'Ì'; else if (strg_in like strg_cmp || 'Ò%') then chr = 'Ò'; else if (strg_in like strg_cmp || 'Ù%') then chr = 'Ù'; else if (strg_in like strg_cmp || 'à%') then chr = 'à'; else if (strg_in like strg_cmp || 'è%') then chr = 'è'; else if (strg_in like strg_cmp || 'ì%') then chr = 'ì'; else if (strg_in like strg_cmp || 'ò%') then chr = 'ò'; else if (strg_in like strg_cmp || 'ù%') then chr = 'ù'; else if (strg_in like strg_cmp || 'Â%') then chr = 'Â'; else if (strg_in like strg_cmp || 'Ê%') then chr = 'Ê'; else if (strg_in like strg_cmp || 'Î%') then chr = 'Î'; else if (strg_in like strg_cmp || 'Ô%') then chr = 'Ô'; else if (strg_in like strg_cmp || 'Û%') then chr = 'Û'; else if (strg_in like strg_cmp || 'â%') then chr = 'â'; else if (strg_in like strg_cmp || 'ê%') then chr = 'ê'; else if (strg_in like strg_cmp || 'î%') then chr = 'î'; else if (strg_in like strg_cmp || 'ô%') then chr = 'ô'; else if (strg_in like strg_cmp || 'û%') then chr = 'û'; /* ... all characters in use */ else chr = '·'; strg_out = strg_out || chr; strg_cmp = strg_cmp || '_'; pos = pos + 1; end end suspend; end