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