我需要在 Informix Server 10 的选择中删除 CR 字符。
该功能chr
在版本 10 中不存在,所以当我尝试这样的替换时
REPLACE(text_column, chr(10), ' ')
我收到这样的错误:
无法解决例程 (chr)。[SQL 状态=IX000,数据库错误代码=-674]
该功能ascii(10)
也不起作用。
提前致谢
这是我使用的代码,最初是在 2005 年,在 Informix 获得 CHR 和 ASCII 函数之前:
CREATE PROCEDURE ascii(C CHAR) RETURNING INT AS result;
DEFINE i INTEGER;
IF c IS NULL THEN
LET i = 0;
ELSE
SELECT val INTO i FROM ascii WHERE chr = c;
END IF;
RETURN i;
END PROCEDURE;
CREATE PROCEDURE chr(i INTEGER) RETURNING CHAR(1) AS result;
DEFINE c CHAR;
IF i < 0 OR i > 255 THEN
RAISE EXCEPTION -746, 0, 'CHR(): integer value out of range 0..255';
END IF;
IF i = 0 OR i IS NULL THEN
LET c = NULL;
ELSE
SELECT chr INTO c FROM ascii WHERE val = i;
END IF;
RETURN c;
END PROCEDURE;
CREATE TABLE ascii
(
val INTEGER NOT NULL UNIQUE CONSTRAINT u1_ascii,
chr CHAR(1) NOT NULL UNIQUE CONSTRAINT u2_ascii
);
REVOKE ALL ON ascii FROM PUBLIC;
GRANT SELECT ON ascii TO PUBLIC;
还有一个带有数字 1..255 和相应字符代码的数据文件。它在 UTF-8 终端上打印效果不佳,因为当将其视为 UTF-8 时,一半的字符(来自 128..255)是损坏的 UTF-8。它仅适用于 ISO 8859-15 (8859-1, ...) 等代码集。您可以确定 ASCII 真的意味着代码点 1..127;由于这些代码点的 UTF-8 和 ASCII 表示是相同的,因此可以使其工作。
如果您确实无法为 ASCII 表生成适当的加载文件,请告诉我(通过电子邮件 - 查看我的个人资料;它可能已经在IIUG 软件存档中可用),我可以将 gzip 压缩存档与数据发送给您以及上面的 SQL(gzipped tar 文件格式总共 1716 个字节)。
我无权访问IDS 10,但看看这是否适合您。
请记住,这是一个示例LF
:
LF
- ASCII码 10,换行;
CR
- ASCII代码 13,回车。
首先确保您的会话已将IFX_ALLOW_NEWLINE设置为 true:
> EXECUTE PROCEDURE IFX_ALLOW_NEWLINE('T');
Routine executed.
>
现在让我们看一个例子:
> CREATE TABLE tab1 (col1 CHAR(100));
Table created.
> INSERT INTO tab1 VALUES ('teste' || CHR(10) || '1');
1 row(s) inserted.
> SELECT col1 FROM tab1;
col1 teste
1
1 row(s) retrieved.
> SELECT REPLACE(col1, '
> ', ' ') FROM tab1;
(expression) teste 1
1 row(s) retrieved.
>
边注: