Informixデータベースで使用されているタイプのレポートを作成する必要があります。Informix SQLダイアレクトで文字列を連結することは可能ですか?
SELECT COUNT(*),
CASE MOD(coltype, 256)
WHEN 0 THEN 'char'
WHEN 1 THEN 'smallint'
WHEN 2 THEN 'integer'
WHEN 3 THEN 'float'
WHEN 4 THEN 'smallfloat'
WHEN 5 THEN 'decimal(' || (collength/256)::int || ', ' || mod(collength, 256) || ')'
WHEN 6 THEN 'serial'
WHEN 7 THEN 'date'
WHEN 8 THEN 'money(' || (collength/256)::int || ', ' || mod(collength, 256) || ')'
WHEN 9 THEN 'null'
WHEN 10 THEN 'datetime ' || substr(hex(collength), -2, 1) || ' to ' || substr(hex(collength), -1, 1)
WHEN 11 THEN 'byte'
WHEN 12 THEN 'text'
WHEN 13 THEN 'varchar'
WHEN 14 THEN 'interval'
WHEN 15 THEN 'nchar'
WHEN 16 THEN 'nvarchar'
WHEN 17 THEN 'int8'
WHEN 18 THEN 'serial8'
WHEN 19 THEN 'set'
WHEN 20 THEN 'multiset'
WHEN 21 THEN 'list'
WHEN 22 THEN 'row (unnamed)'
WHEN 23 THEN 'collection'
WHEN 40 THEN 'lvarchar fixed-length opaque types'
WHEN 41 THEN 'blob, boolean, clob variable-length opaque types'
WHEN 43 THEN 'lvarchar (client-side only)'
WHEN 45 THEN 'boolean'
WHEN 52 THEN 'bigint'
WHEN 53 THEN 'bigserial'
WHEN 2061 THEN 'idssecuritylabel'
WHEN 4118 THEN 'row (named)'
ELSE '???'
END CASE
FROM syscolumns, systables
WHERE tabtype='T'
AND systables.tabid >= 100
AND tabname[1] <> '_'
AND syscolumns.tabid = systables.tabid
GROUP BY 2
ORDER BY 1 desc, 2;
そして、私が見たレポートで:
datetime 0 to 4
私はこの0
を置き換えることができますどのようdatetime
の復号化は、今私は、このようなSQLを持っているドキュメント(https://www.ibm.com/support/knowledgecenter/SSGU8G_12.1.0/com.ibm.sqlr.doc/ids_sqr_027.htm)
に応じて少し派手ですyear
と4
〜day
はSQLのみを使用していますか?私はちょうど同じようCASE
に連結する文字列でCASE
を追加しようとしました:
...
WHEN 10 THEN 'datetime ' || substr(hex(collength), -2, 1) || ' to ' || case substr(hex(collength), -1, 1) when '4' then 'day' else '?' end case
...
が、私は構文エラーを得ました。
SQLでも可能ですか?
あなたは既に大文字表記の中にいます...あなたは別の表情を開始する予定ですか? ** when **条件を変更する必要があります。 –