2

でエンコードされたELEMENTSという名前のVARCHARフィールドを持つテーブル(たとえば)があります。「非ASCII文字」を含むフィールド内のすべての文字列、つまりASCII文字を含まない文字セットに含まれる文字を検索する必要があります。NAMEccsid 1144NAMEccsid 1144

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 に答える