我需要删除Informix Server 10中的select中的CR字符。
版本10中不存在函数chr
,因此当我尝试替换
REPLACE(text_column, chr(10), ' ')
我收到这样的错误:
常规(chr)无法解决。 [SQL State = IX000,DB 错误码= -674]
函数ascii(10)
也不起作用。
提前致谢
答案 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.
>
旁注: