2011-11-29 2 views
0

я не мог понять, почему следующий код SQL>функция to_number в SQL

Select to_number('1234.64', '9999.9') from Dual; 

возвращает это число 1234,6? Это что-то вроде округления, усечения или? Пожалуйста, помогите мне понять этот код, я знаю to_number функции , я использовал много раз этот код для простых символов, но здесь не ясно ничего

+0

Какую базу данных вы используете? реализация SQL отличается ... – Guffa

+1

Тест 'to_number ('1234.65', '9999.9')', и если ваш ответ '1234.7', он округляется. –

+1

@dato, какой результат вы ожидали, что это вернется? –

ответ

0

Вы должны использовать

SELECT to_number('1234.64', '9999.99') from Dual; 

Ваша маска говорит двигатель у ou нужно всего одно десятичное число, поэтому число округляется.
Если вы хотите, чтобы получить точное число, не указать любую маску:

SELECT to_number('1234.64') from Dual; 
+1

Я думаю, вы пропустили всю точку вопроса ...... – Ariel

+0

@Ariel: Я читал _ «почему ... возвращает это число 1234.6?» _, так что я должен думать? Возможно, я пропустил это, я не говорю вам об обратном ... но в чем смысл тогда? Спасибо :) – Marco

+0

@dato: Прошу прощения, если мой ответ не был тем, который вы искали. Если да, сообщите мне, и я немедленно удалю его! – Marco

1

Это выглядит очень похоже на Oracle, но я подозреваю, что результат будет похож на любой SQL, который используется to_number.

Функция to_number принимает два аргумента: строку, подлежащую преобразованию в число, и строку формата для преобразования.

В примере «12345.64» - это строка, которая должна быть преобразована, а «9999.9» - это строка формата. В этой строке формата символ 9 обозначает цифру, а a. обозначает десятичную точку.

Таким образом, функция просит преобразовать строку «12345.64» в число с точностью до 4 цифр справа от десятичной точки и только 1 цифру после десятичной точки.

Второй аргумент не является обязательным - при нормальных обстоятельствах я бы опустил его.

Смежные вопросы