我有一个表(例如 ELEMENTS
),其中包含一个名为 NAME
的 VARCHAR 字段,该字段以 ccsid 1144
编码。我需要找到 NAME
字段中包含“非 ascii 字符”的所有字符串,即 ccsid 1144
字符集中不含 ascii 字符的字符。
最佳答案
我认为你应该能够创建这样的函数:
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,您可能需要使用不同的数据类型。
关于sql - DB2 sql查询查找字符串中的非ascii字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13088119/