2

我有一个表(比如ELEMENTS),其中包含一个名为 VARCHAR 字段的NAME编码ccsid 1144。我需要在NAME字段中找到包含“非 ascii 字符”的所有字符串,即字符ccsid 1144集中没有 ascii 字符的字符。

4

1 回答 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 回答