2008-10-07 7 views
2

Dans Informix, comment puis-je convertir un type char(8) en un type money, afin que je puisse le comparer à un autre type money?Casting dans Informix

L'utilisation de "tblAid.amt::money as aid_amt" ne fonctionnait pas. L'utilisation de "(tblAid.amt * 1) AS aid_amt" ne fonctionnait pas.

+1

Quelle version d'Informix utilisez-vous? (Vous devriez toujours dire, parce que la réponse peut être nuancée pour adresser votre système.Les réponses changent au fil du temps - si vous utilisez IDS 7.31, aucune des notations de cast ne fonctionnera.) –

Répondre

5

try this ->

select (disb_amt::NUMERIC) disb_amt from tmp_kygrants; 

Vous pourriez être en mesure de comparer les montants numériques.

+0

Les parenthèses devraient être superflues mais non-nocives. –

1

Cela fait longtemps que je n'ai pas joué avec informix et que je n'ai pas d'instance en cours pour le moment. Cependant, il y a deux choses qui peuvent causer un problème ici:

1) puisqu'il s'agit d'un caractère (8), il peut contenir des valeurs qui ne peuvent pas être converties en numérique sans un peu de 'nettoyage'. Par exemple. "abc". Ou "1,234,567.00".
2) Espaces de fin. (char par opposition à varchar).

Quelle erreur informez-vous sur votre distribution explicite (:: money)?

5

Première question - pourquoi diable ne stockez-vous pas une valeur numérique dans une colonne numérique? Cela rendrait le reste de votre question discutable. Cela signifie également que votre système fonctionnera mieux. Lorsque vous avez besoin de stocker des valeurs de données, utilisez le type évident; N'utilisez pas un type de chaîne sauf si les données sont une chaîne.

Comme indiqué précédemment, vous pouvez utiliser la notation cast Informix non standard:

SELECT some_column::MONEY FROM WhereEver; 

Vous pouvez également être plus prudent sur le type de casting - en utilisant l'argent (8,2) par exemple. Vous pouvez également utiliser la notation standard:

SELECT CAST(some_column AS MONEY(8,2)) FROM WhereEver; 

Cela suppose que vous utilisez IDS 9.x ou plus tard - produits plus anciens ne prennent pas en charge des moulages du tout. Cependant, en général, Informix est très bon pour effectuer des conversions automatiquement (par exemple, convertir des nombres en chaînes). Cependant, les chaînes sont comparées lexicographiquement et non numériquement, donc un CAST est probablement plus sage dans ce contexte - mais éviter d'avoir besoin d'une distribution en utilisant le type correct en premier lieu est plus sage.