- PR -

SQLで、全角文字をキャストして検索するとエラーが発生してしまいます。

1
投稿者投稿内容
カレーうどん
会議室デビュー日: 2006/11/30
投稿数: 16
投稿日時: 2007-02-28 10:40

DB2のバージョン8を使用して、以下のSQLを実行しようとしたのですが、うまくいきません。
その理由を知りたいのですが、どなたかご存じないでしょうか。

SELECT
MEMBER_NAME
FROM
M_MEMBER
WHERE
MEMBER_NAME LIKE VARGRAPHIC(CAST('%123456789%' AS VARCHAR(20)))

(MEMBER_NAME列のデータ型はGRAPHICです。)

エラーの内容としては、
SQLCODE=-191
SQLSTATE= 22504
となっており、エラーの説明は、
「MIXED データの形式が正しくない。 」
という事でした。
おそらくキャスト関数の入力値に誤りがあるのだろうと解釈し、いろいろ試したのですが、
以下の事が解っています。

・検索条件の文字列を1文字短くすると動作する
・検索条件の文字列をこのままで、VARCHAR(20)をVARCHAR(22)とすると動作する。

キャスト関数の仕様を試してみようと思い、以下のSQLを実行してみました。

SELECT
CAST('12' AS VARCHAR(4)) AS TEST_COL
FROM
M_MEMBER

これも前述と同じエラーが発生したので、以下の事を確認しました。
・検索条件の文字列を1文字短くすると動作する
・検索条件の文字列をこのままで、VARCHAR(4)をVARCHAR(6)とすると動作する。

つまり、全角文字をVARCHAR型にキャストする時に、何故か2バイト分増やしてキャスト
しないといけないようだ、と判断しました。

しかし、このSQLは過去のDB2のバージョンでは正常に動作していたはずなのです。
納得がいかず、キャストの仕様が変わったのかと思い、以下のサイトで調べてみましたが、
今のところそういった情報が見つかっていません。

http://www-06.ibm.com/jp/software/data/developer/index.html

どうしてこのようなことが起きるのか、ちゃんとした理由を知りたいと考えています。
どなたかご存知でしたら教えていただけないでしょうか。
1

スキルアップ/キャリアアップ(JOB@IT)