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

时间:2016-03-02 13:31:49

标签: sql informix chr

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

版本10中不存在函数chr,因此当我尝试替换

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

我收到这样的错误:

  

常规(chr)无法解决。 [SQL State = IX000,DB   错误码= -674]

函数ascii(10)也不起作用。

提前致谢

2 个答案:

答案 0 :(得分: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 Software archive中提供)我可以发送给您包含数据和上面的SQL的gzip压缩文件(gzipped tar文件格式的总计1716字节)。

答案 1 :(得分: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到0范围内的整数 255并返回相应的单字节 ASCII 代码点。
  • ASCII函数接受任何字符数据类型的单个参数,并返回相应的 ASCII 十进制代码 参数中的第一个字符。