0

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

该功能chr在版本 10 中不存在,所以当我尝试这样的替换时

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

我收到这样的错误:

无法解决例程 (chr)。[SQL 状态=IX000,数据库错误代码=-674]

该功能ascii(10)也不起作用。

提前致谢

4

2 回答 2

3

这是我使用的代码,最初是在 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 个字节)。

于 2016-03-03T03:30:22.540 回答
1

我无权访问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.

>

边注:

  • CHR函数采用 0 到 255 范围内的整数并返回相应的单字节ASCII代码点。
  • ASCII函数接受任何字符数据类型的单个参数,并返回参数中第一个字符的相应ASCII十进制代码。
于 2016-03-02T15:09:37.720 回答