- PR -

列名で数字を使用したい

1
投稿者投稿内容
butthead
大ベテラン
会議室デビュー日: 2004/01/14
投稿数: 162
投稿日時: 2004-09-23 16:47
再度質問させてください。

select a1 , AVG(CASE WHEN a2 = 4 THEN a3 ELSE NULL END) 4
from TMP2 GROUP BY a1
のようなSQLを作成し、クエリをとってこさせたいのですが、いかんせん、数字の列名
ところでエラーになります。ダブルコーテーションでOracleならくくれますが、
Informixだとほかにやり方はないのでしょうか。

よろしくお願いします。

hidemaru
常連さん
会議室デビュー日: 2004/03/22
投稿数: 44
投稿日時: 2004-09-24 09:58
これは、informix の名前付けの規則にある通り、
識別子には、英文字または漢字などの日本語文字で始まる、
英文字、数字、日本語文字、下線を任意の組み合わせで
使用した18バイトまでの名前を指定する。
とあります。
ですから、先頭が数字の識別子は使用できません。
なぜ、この列名は、数字なのでしょうか?

数字にこだわるのなら、全角漢字にして、"2" を使う方法があります。
全角半角変換のモジュールは用意されているので、
それを使って工夫する方法ならあると思いますが・・・・・。
butthead
大ベテラン
会議室デビュー日: 2004/01/14
投稿数: 162
投稿日時: 2004-09-24 12:28
ありがとうございます。m(__)m
プログラム上の問題なので、ひとまず列名にRという大文字を入れて後で消すということで解決しました。ところで、ふと思ったのですが、informixのSQL文の長さには
何か制限があるのでしょうか。
たとえば、

SELECT department_id,
MIN(CASE WHEN department_name = 'Administration'
THEN manager_id ELSE NULL END)
RAdministration
, MIN(CASE WHEN department_name = 'Construction'
THEN manager_id ELSE NULL END)
RConstruction
, MIN(CASE WHEN department_name = 'Contracting'
THEN manager_id ELSE NULL END)
RContracting
, MIN(CASE WHEN department_name = 'Government Sales'
THEN manager_id ELSE NULL END)
RGovernment Sales
, MIN(CASE WHEN department_name = 'IT Helpdesk'
THEN manager_id ELSE NULL END)
RIT Helpdesk
, MIN(CASE WHEN department_name = 'IT Support'
THEN manager_id ELSE NULL END)
RIT Support
, MIN(CASE WHEN department_name = 'Manufacturing'
THEN manager_id ELSE NULL END)
RManufacturing
, MIN(CASE WHEN department_name = 'Marketing'
THEN manager_id ELSE NULL END)
RMarketing
, MIN(CASE WHEN department_name = 'NOC'
THEN manager_id ELSE NULL END)
RNOC
, MIN(CASE WHEN department_name = 'Operations'
THEN manager_id ELSE NULL END)
ROperations
, MIN(CASE WHEN department_name = 'Payroll'
THEN manager_id ELSE NULL END)
RPayroll
FROM TMP1 GROUP BY department_id

というような長い文をODBC関数のSQLEXECDIRECTで検索させるとエラーが帰ってきます。
ところが、上記のMinで作った列を3つくらいまでにするとクエリが帰ってきます。

ちなみにDBACCESSではバッファが長くて使えませんというエラーが帰ってくるのですが、やはりプログラム上でもSQLを実行する際にSQLの長さというのは気にしなければいけないんでしょうか。

#Informixがわからなさすぎて、いつのまにかベテランになっていたのでこのままのスレ使用w
1

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