如何在 Informix 的函数参数中保留空格?

How to preserve white spaces in function arguments in Informix?

我正在尝试为 Informix 11.5 创建一个 InStr 函数版本。这是代码:

CREATE FUNCTION MY_INSTR(txt VARCHAR(255), term VARCHAR(255))
    RETURNING VARCHAR(255);
  DEFINE i INTEGER;
  DEFINE len INTEGER;
  DEFINE lenterm INTEGER;

  LET i = 1;
  LET lenterm = LENGTH(term);
  LET len = LENGTH(txt) - lenterm;

  WHILE ( i <= len ) LOOP
    IF SUBSTR( txt, i, lenterm ) = term THEN
      RETURN i;
    END IF
    LET i = i + 1;
  END LOOP

  RETURN 0;
END FUNCTION;

我将使用此函数在具有全名的列中获取用户的名字,如下所示:

SELECT SUBSTR(name, 1, MY_INSTR(name, " ")) AS firstname
  FROM users

我需要将值 " " 作为术语传递,但是当我这样做时,lenterm 等于 0。

有没有办法在将空格传递给 Informix 中的函数时保留空格?

对于 VARCHAR 类型,OCTET_LENGTH 函数应该 return 包括尾随空格的长度。 来自 manual:

The OCTET_LENGTH returns the number of bytes in a character column, including any trailing spaces.

我没有要测试的 informix 11.50 实例,但在 Informix 12.10 (FC6DE) 中尝试了以下操作:

CREATE FUNCTION f_my_t(param1 VARCHAR(10))
RETURNING INTEGER AS param1_length;
  DEFINE l_result INTEGER;
  LET l_result = OCTET_LENGTH(param1);
  RETURN l_result;
END FUNCTION;

EXECUTE FUNCTION f_my_t (' ');

我得到的结果:

Database selected.
Routine created.

param1_length
            1
1 row(s) retrieved.

Database closed.