Informix Server 10 并删除 select 中的 CR 字符

Informix Server 10 and remove CR character in select

我需要在 Informix Server 10 中删除 select 中的 CR 字符。

函数 chr 在版本 10 中不存在,所以当我尝试这样替换时

REPLACE(text_column, chr(10), ' ')

我收到这样的错误:

Routine (chr) can not be resolved. [SQL State=IX000, DB Errorcode=-674]

函数ascii(10)也不行。

提前致谢

我无法访问 IDS 10,但看看这是否适合您。

请记住,这是 LF 的示例:

LF - ASCII Code 10, Line Feed;

CR - ASCII Code 13, Carriage Return.

首先确保您的会话 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.

>

旁注:

  • CHR 函数接受 0 到 0 范围内的整数 255和returns对应的单字节ASCII码位。
  • ASCII 函数接受任何字符数据类型的单个参数和 returns 相应的 ASCII 十进制代码 参数中的第一个字符。

这是我使用的代码,最初是在 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 终端上打印效果不佳,因为一半字符(从 128..255 开始)在被视为 UTF-8 时被破坏为 UTF-8。它仅适用于 ISO 8859-15(8859-1,...)等代码集。您可以确定 ASCII 真的意味着代码点 1..127;因为这些代码点的 UTF-8 和 ASCII 表示是相同的,所以可以工作。

如果您确实无法为 ASCII table 生成合适的加载文件,请告诉我(通过电子邮件 - 查看我的个人资料;它可能已经在 IIUG Software archive 中可用)和我可以向您发送带有数据的压缩存档以及上面的 SQL(压缩 tar 文件格式的总计 1716 字节)。