Вопрос
В Informix, как я могу привести тип char (8)
к типу money
, чтобы я мог сравнить его с другим money
тип?
Использование " tblAid.amt :: money as aid_amt
" не работал.
Использование " (tblAid.amt * 1) AS aid_amt
" не сработало.
Решение
попробуйте это - > Р>
select (disb_amt::NUMERIC) disb_amt from tmp_kygrants;
Вы можете сравнить суммы в числовом выражении.
Другие советы
Первый вопрос: почему вы не храните числовое значение в числовом столбце? Это сделает остальную часть вашего вопроса тоо. Это также означает, что ваша система будет работать лучше. Когда вам нужно сохранить значения данных, используйте очевидный тип; не используйте строковый тип, если данные не являются строкой.
Как уже отмечалось, вы можете использовать нестандартную нотацию Informix:
SELECT some_column::MONEY FROM WhereEver;
Вы также можете быть более осторожными в отношении типа приведения - например, используя MONEY (8,2). Вы также можете использовать стандартную запись:
SELECT CAST(some_column AS MONEY(8,2)) FROM WhereEver;
Предполагается, что вы используете IDS 9.x или более поздней версии - старые продукты вообще не поддерживают приведение типов. Тем не менее, в целом, Informix довольно хорош в автоматическом преобразовании (например, преобразование чисел в строки). Однако строки сравниваются лексикографически, а не численно, поэтому CAST, вероятно, более разумен в этом контексте, но избегать необходимости приведения с использованием правильного типа в первую очередь еще мудрее.
'Это было давно, так как я поиграл с Informix, и у меня нет под рукой работающего экземпляра. Однако есть две вещи, которые могут вызвать проблемы:
1) так как это char (8), он может содержать значения, которые не могут быть преобразованы в числовые без небольшого количества «очистки». Например. & Quot; аЬс & Quot ;. Или " 1 234 567,00 " ;.
2) Конечные пробелы. (символ в отличие от varchar).
Какую ошибку Informix вы получаете при явном приведении (:: money)?