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

时间:2017-01-04 20:49:19

标签: sql 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中的函数时,有没有办法保留空格?

1 个答案:

答案 0 :(得分:2)

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

  

OCTET_LENGTH返回字符列中的字节数,   包括任何尾随空格。

我没有测试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.