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

Sql 如何在Informix中保留函数参数中的空格?,sql,informix,Sql,Informix,我正在尝试为Informix11.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

我正在尝试为Informix11.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;
我需要将值
作为术语传递,但当我传递时,
lenterm
等于0


在Informix中将空格传递给函数时,是否有保留空格的方法?

对于
VARCHAR
类型,
OCTET\u LENGTH
函数应返回包含尾随空格的长度。 从:

八位字节长度返回字符列中的字节数, 包括任何尾随空格

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

我得到的结果是:

Database selected.
Routine created.

param1_length
            1
1 row(s) retrieved.

Database closed.

在SQL语言中,字符串文字用单引号括起来。@mustaccio:在Informix中,允许甚至习惯使用双引号。您必须努力(设置环境变量)使双引号充当分隔标识符的标记。这主要是由于古代历史(80年代早期至中期)。
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.