我有一个表(比如ELEMENTS
),其中包含一个名为 VARCHAR 字段的NAME
编码ccsid 1144
。我需要在NAME
字段中找到包含“非 ascii 字符”的所有字符串,即字符ccsid 1144
集中没有 ascii 字符的字符。
问问题
6557 次
1 回答
2
我认为您应该能够创建这样的函数:
CREATE FUNCTION CONTAINS_NON_ASCII(INSTR VARCHAR(4000))
RETURNS CHAR(1)
DETERMINISTIC NO EXTERNAL ACTION CONTAINS SQL
BEGIN ATOMIC
DECLARE POS, LEN INT;
IF INSTR IS NULL THEN
RETURN NULL;
END IF;
SET (POS, LEN) = (1, LENGTH(INSTR));
WHILE POS <= LEN DO
IF ASCII(SUBSTR(INSTR, POS, 1)) > 128 THEN
RETURN 'Y';
END IF;
SET POS = POS + 1;
END WHILE;
RETURN 'N';
END
然后写:
SELECT NAME
FROM ELEMENTS
WHERE CONTAINS_NON_ASCII(NAME) = 'Y'
;
(免责声明:完全未经测试。)
顺便说一句——从文档来看,这似乎VARCHAR
是一串字节,而不是 Unicode 字符。(字节范围从 0 到 0xFF;Unicode 字符范围从 0 到 0x10FFFD。)如果您对支持 Unicode 感兴趣,您可能想要使用不同的数据类型。
于 2012-10-26T14:11:58.707 回答