web-dev-qa-db-fra.com

Comment puis-je définir le type de données d'une vue dans MySQL?

J'ai écrit une vue d'agrégation simple sur une table et la vue renvoie différents types de données que la table. Cela provoque des problèmes du côté de l'application.

Voici une requête simplifiée pour l'amour de l'exemple:

SELECT id, FLOOR(date_id / 100) month_id, SUM(value) FROM some_table WHERE....;

Le problème est que data_id est une colonne entière (11), représentée dans mon application sous forme d'int32, et le résultat de FLOOR(date_id / 100) est un Bigint, représenté dans mon application en tant qu'inT64.

Le type d'identifiant change également, pour des raisons pour lesquelles je ne peux pas expliquer, de INT64 à int32.

Y a-t-il un moyen de lancer la colonne à un int32? COULER semblait ne pas fonctionner. Je n'ai trouvé aucune documentation pour une façon de voir quel est le type de données attendu d'un ensemble de résultats d'affichage.

4
OmerGertel

Vous pouvez chasser les définitions de colonne dans l'information_schema. Par exemple, pour la table mydb.mytb et le nom de colonne requis s'appelle mycol, faites ceci:

SELECT column_type FROM information_schema.columns
WHERE table_schema='mydb'
AND table_name='mytb'
AND column_name='mycol';

Pour la requête avec des formules que vous avez dans votre question:

SELECT id, FLOOR(date_id / 100) month_id, SUM(value) FROM some_table WHERE....;

Essayez de créer votre propre table TEMP vide à l'aide de votre requête avec une clause de faux évalué:

CREATE TABLE IF NOT EXISTS test.mycolumnmap
SELECT id, FLOOR(date_id / 100) month_id, SUM(value) value FROM some_table WHERE 1=2;

Cette table, bien que vide, a une structure de table définie et des types de colonnes définis. Maintenant, il suffit d'exécuter la même requête pour obtenir les types de colonne de la table Temp:

SELECT column_name,column_type FROM information_schema.columns
WHERE table_schema='test'
AND table_name='mycolumnmap'
AND column_name IN ('id','month_id','value');

Une autre alternative consiste simplement à demander directement les informations_schema sur les colonnes de la vue:

SELECT column_name,column_type FROM information_schema.columns
WHERE table_schema='test'
AND table_name='view_name';

Essaie !!!

2
RolandoMySQLDBA

Ceci est pris directement à partir du site Web MySQL et pourrait être votre solution:

Publié par le Lynxy le 9 mars 2009 8:56

MySQL 5.1 Retourne un entier 64 bits lors de l'utilisation de Cast (). Pour ceux qui cherchent à lancer un entier signé 32 bits à un entier non signé 32 bits: vous pouvez utiliser la fonction de cette façon.

Conversion -1062731519 à un entier non signé (ce nombre est la valeur décimale de 192.168.1.1):

Sélectionner Cast (('- 1062731519' & 0XFFFFFFFFFF) comme integer non signé);

Le résultat est 3232235903, ce qui est correct.

http://dev.mysql.com/doc/refman/5.5/fr/cast-fonctions.html

0
randomx