sql - DB2 sql查询查找字符串中的非ascii字符

标签 sql character-encoding db2

我有一个表(例如 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/

相关文章:

MySQL:无法删除或更新父行:外键约束失败

mysql - 从 mysql 数据库中选择一些内容并按计数(其中)排序

db2 - 获取自 20120801185856 时间戳以来特定时间戳以来已更改的 db2 表的列表

SQL 查询帮助(高级 - 对我来说!)

c# - Unicode 转换为 String 留下前导字节顺序标记

导入csv表时MySQL无效的UTF8字符串

php - Chrome 的 MySQL UTF8,IE 的 UTF8,但是 Chrome 的 HEADER UTF8 和 IE 的 UTF-8?

sql - 时间戳 : db2 query 中的微秒

db2 - 如何从 DB2 表中选择注释?

mysql - 表连接后 SQL 更新表属性