如何在 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.
我正在尝试为 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.