Кастинг в Informix - PullRequest
       26

Кастинг в Informix

2 голосов
/ 07 октября 2008

В Informix, как я могу привести тип char(8) к типу money, чтобы я мог сравнить его с другим типом money?

Использование "tblAid.amt::money as aid_amt" не сработало. Использование "(tblAid.amt * 1) AS aid_amt" не сработало.

Ответы [ 3 ]

5 голосов
/ 09 октября 2008

Первый вопрос - с какой стати вы не храните числовое значение в числовом столбце? Это сделает остальную часть вашего вопроса тоо. Это также означает, что ваша система будет работать лучше. Когда вам нужно сохранить значения данных, используйте очевидный тип; не используйте строковый тип, если данные не являются строкой.

Как уже отмечалось, вы можете использовать нестандартную нотацию Informix:

SELECT some_column::MONEY FROM WhereEver;

Вы также можете быть более осторожными в отношении типа приведения - например, используя ДЕНЬГИ (8,2). Вы также можете использовать стандартную запись:

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

Это предполагает, что вы используете IDS 9.x или новее - более старые продукты вообще не поддерживают приведение типов. Тем не менее, в целом, Informix довольно хорош в автоматическом преобразовании (например, преобразование чисел в строки). Тем не менее, строки сравниваются лексикографически, а не численно, поэтому CAST, вероятно, более разумен в этом контексте, но избегать необходимости приведения с использованием правильного типа в первую очередь еще мудрее.

5 голосов
/ 09 октября 2008

попробуйте это ->

select (disb_amt::NUMERIC) disb_amt from tmp_kygrants;

Вы можете сравнить суммы в числовом выражении.

1 голос
/ 09 октября 2008

'Это было какое-то время с тех пор, как я поигрался с informix, и у меня сейчас нет под рукой работающего экземпляра. Тем не менее, есть две вещи, которые могут вызвать проблемы здесь:

1), поскольку это символ (8), он может содержать значения, которые не могут быть преобразованы в числовые значения без некоторого «очистки». Например. «А». Или "1 234 567,00".
2) Конечные пробелы. (символ в отличие от varchar).

Какую ошибку Informix вы получаете при явном приведении (:: money)?

...