Je veux faire un rapport des types utilisés dans la base de données Informix. Décodage de datetime
est un peu de fantaisie selon la documentation (https://www.ibm.com/support/knowledgecenter/SSGU8G_12.1.0/com.ibm.sqlr.doc/ids_sqr_027.htm)CASE est-il possible de concaténer des chaînes dans le langage SQL Informix?
Maintenant, j'ai comme 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;
Et dans les rapports que je vois:
datetime 0 to 4
Comment puis-je remplacer 0
à year
et 4
à day
en utilisant SQL uniquement? J'ai essayé d'ajouter CASE
dans la chaîne concaténer en CASE
tout comme:
...
WHEN 10 THEN 'datetime ' || substr(hex(collength), -2, 1) || ' to ' || case substr(hex(collength), -1, 1) when '4' then 'day' else '?' end case
...
mais je suis erreur de syntaxe.
Est-ce possible en SQL seulement?
Vous êtes déjà dans une expression de cas ... et vous prévoyez d'en commencer une autre? Vous devez modifier la condition ** quand ** pour inclure ** quand 10 et ... ** –