Как перевести имена в цифры sql
TO_NUMBER converts expr to a value of NUMBER data type.
expr can be any expression that evaluates to a character string of type CHAR , VARCHAR2 , NCHAR , or NVARCHAR2 , a numeric value of type NUMBER , BINARY_FLOAT , or BINARY_DOUBLE , or null. If expr is NUMBER , then the function returns expr . If expr evaluates to null, then the function returns null. Otherwise, the function converts expr to a NUMBER value.
If you specify an expr of CHAR , VARCHAR2 , NCHAR , or NVARCHAR2 data type, then you can optionally specify the format model fmt .
If you specify an expr of BINARY_FLOAT or BINARY_DOUBLE data type, then you cannot specify a format model because a float can be interpreted only by its internal representation.
Refer to «Format Models» for information on number formats.
The ‘nlsparam’ argument in this function has the same purpose as it does in the TO_CHAR function for number conversions. Refer to TO_CHAR (number) for more information.
This function does not support CLOB data directly. However, CLOB s can be passed in as arguments through implicit data conversion.
The following examples convert character string data into a number:
The following example returns the default value of 0 because the specified expression cannot be converted to a NUMBER value:
TO_NUMBER ФУНКЦИЯ
Функция Oracle/PLSQL TO_NUMBER преобразует строку в число.
Синтаксис
Синтаксис Oracle/PLSQL функции TO_NUMBER:
Параметры или аргументы
string1 строка, которая будет преобразована в число.
format_mask не является обязательным. Формат, который будет использоваться для преобразования string1 в число.
nls_language не является обязательным. nls_language используется для преобразования string1 в число.
Функция TO_NUMBER возвращает numeric значение.
Применение
Функцию TO_NUMBER можно использовать в следующих версиях Oracle/PLSQL:
- Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i, Oracle 8i
Пример
Рассмотрим несколько примеров функции TO_NUMBER и изучим, как использовать функцию TO_NUMBER в Oracle/PLSQL.
Конвертировать текст в число в запросе MySQL
Можно ли преобразовать текст в число в запросе MySQL? У меня есть столбец с идентификатором, который содержит имя и номер в формате «имя-номер». Столбец имеет тип VARCHAR. Я хочу сортировать строки по числу (строки с тем же именем), но столбец сортируется в соответствии с порядком символа, т.е.
Если я сокращаю число, могу ли я преобразовать число «varchar» в «реальный» номер и использовать его для сортировки строк? Я хотел бы получить следующий заказ.
Я не могу представить число как отдельный столбец.
отредактировано 2011-05-11 9:32
Я нашел следующее решение . ORDER BY column * 1 . Если имя не будет содержать каких-либо номеров, сохранит ли это решение?
Числовые преобразования в PL/SQL на примере: TO_NUMBER, TO_CHAR

Компьютеры лучше работают с числами в двоичном представлении, тогда как людям удобнее видеть числовые данные в виде строк, состоящих из цифр, запятых и пробелов. PL/SQL позволяет преобразовывать числа в строки, и наоборот. Обычно такие преобразования выполняются функциями TO_CHAR и TO_NUMBER .
При работе с двоичными вещественными типами IEEE-754 используйте функции TO_BINARY_FLOAT и TO_BINARY_DOUBLE . Чтобы упростить последующее изложение, в тексте будет упоминаться только функция TO_NUMBER . Помните, что все неуточненные ссылки на TO_NUMBER в равной степени относятся к функциям TO_BINARY_FLOAT и TO_BINARY_DOUBLE .
Функция TO_NUMBER
Функция TO_NUMBER преобразует строки фиксированной и переменной длины, а также вещественные типы IEEE-754 к типу NUMBER с использованием необязательной маски форматирования. Используйте эту функцию, когда потребуется преобразовать строковое представление числа в соответствующее числовое значение. Синтаксис вызова TO_NUMBER :
Здесь строка — строка или выражение типа BINARY_DOUBLE , содержащее представление числа; формат — необязательная маска, которая определяет, как функция TO_NUMBER должна интерпретировать символьное представление числа, содержащегося в первом параметре; параметры_nls — необязательная строка со значениями параметров NLS . Ее можно применять для замены текущих установок параметров NLS уровня сеанса.
При работе с функциями TO_BINARY_FLOAT и TO_BINARY_DOUBLE можно использовать строки INF и –INF для представления положительной и отрицательной бесконечности, а также строку NaN для представления «не числа». Эти специальные строки не чувствительны к регистру символов.
Использование TO_NUMBER без параметров форматирования
В простейших случаях функция TO_NUMBER вызывается без строки форматирования. Все следующие преобразования успешно выполняются без дополнительных параметров:
В общем случае функция TO_NUMBER может использоваться без параметров форматирования в следующих случаях:
- когда число представлено только цифрами с единственной десятичной запятой;
- при использовании научной записи — например, 1.25E2;
- перед числом стоит необязательный знак, плюс или минус; при отсутствии знака число считается положительным.
Если символьная строка не соответствует этим критериям или значения должны округляться до заданного количества десятичных знаков, вызывайте функцию TO_NUMBER с маской форматирования.
Использование TO_NUMBER с маской форматирования
Применение функции TO_NUMBER с маской форматирования позволяет получить более разнообразные представления чисел в PL/SQL. Например, местоположение разделителей групп и символ денежной единицы могут задаваться следующим образом:
Указывать в форматной строке точное количество цифр не обязательно. Функция TO_NUMBER позволяет задать в строке форматирования больше цифр, чем содержится в преобразуемом значении. Следующая строка кода также выполняется без ошибок:
Но если справа или слева от десятичной запятой значение содержит больше цифр, чем допускает маска форматирования, произойдет ошибка. Первое из следующих двух преобразований завершится ошибкой, поскольку строка содержит десять цифр слева от десятичной запятой, тогда как маска разрешает только девять. Второе преобразование завершается ошибкой из-за того, что строка содержит слишком много цифр справа от десятичной запятой:
Элемент форматирования 0 обеспечивает вывод начальных нулей:
Элемент PR распознает угловые скобки как обозначение отрицательного числа:
Однако не все элементы форматирования предназначены для преобразования строк в числа. Например, элемент RN , предназначенный для вывода числа римскими цифрами, предназначен только для форматирования выводимой информации. Следующая попытка преобразования вызовет ошибку:
Элемент EEEE тоже используется только для форматирования вывода. Для обратного преобразования он не нужен, поскольку функция TO_NUMBER правильно распознает числа в научной записи без дополнительных указаний:
Передача функции TO_NUMBER параметров NLS
Действие многих элементов форматирования определяется текущими установками параметров NLS . Например, элемент G представляет разделитель групп разрядов, но какой именно символ используется в качестве разделителя, зависит от текущего значения параметра NLS_NUMERIC_CHARACTERS в момент выполнения преобразования. Для просмотра текущих значений параметров можно запросить представление NLS_SESSION_PARAMETERS :
Некоторые установки NLS по умолчанию зависят от других. Если присвоить параметру NLS_TERRITORY значение AMERICA , Oracle по умолчанию установит параметр NLS_NUMERIC_CHARACTERS равным ‘.,’. Это не помешает явно присвоить параметру NLS_NUMERIC_CHARACTERS другое значение (например, с использованием команды ALTER SESSION ).
Иногда отдельные параметры NLS требуется переопределить только на время вызова TO_NUMBER . В этом случае нужные установки задаются в этом вызове и действуют они исключительно для него. Например, в следующем примере при вызове TO_NUMBER задаются установки NLS , соответствующие NLS_TERRITORY = FRANCE :

Строка параметров NLS получается слишком длинной, поэтому мы разбиваем ее на три строки, объединяемых оператором конкатенации, чтобы пример лучше смотрелся на странице. Обратите внимание на дублирование кавычек. Параметру NLS_NUMERIC_CHARACTERS требуется присвоить следующее значение:
Поскольку это значение вместе с кавычками включается в строку параметров NLS , каждую кавычку необходимо продублировать. В результате получается следующая строка:
Функция TO_NUMBER позволяет задавать только три приведенных в данном примере параметра NLS . Было бы удобнее, если бы при вызове можно было использовать следующую запись:
К сожалению, изменение параметра NLS_TERRITORY при вызове TO_NUMBER не поддерживается. Функция поддерживает только NLS_NUMERIC_CHARACTERS , NLS_CURRENCY и NLS_ISO_CURRENCY .
За подробной информацией о настройке параметров NLS обращайтесь к руководству «Oracle’s Globalization Support Guide», которое является частью документации Oracle11g.
Передавать TO_NUMBER третий аргумент не рекомендуется — лучше полагаться на настройки сеанса, определяющие, как PL/SQL интерпретирует элементы маски форматирования (такие, как L, G и D). Вместо того чтобы жестко кодировать информацию в программах, нужно дать пользователю возможность задавать их на уровне сеанса.
Функция TO_CHAR
Функция TO_CHAR выполняет задачу, обратную функции TO_NUMBER : она преобразует число в его символьное представление. Используя необязательную маску форматирования, можно подробно указать, каким должно быть представление. Функция TO_CHAR вызывается следующим образом:
Здесь число — это число, которое требуется представить в символьной форме. Оно может относиться к любому из числовых типов PL/SQL: NUMBER, PLS_INTEGER, BINARY_INTEGER, BINARY_FLOAT, BINARY_DOUBLE, SIMPLE_INTEGER, SIMPLE_FLOAT или SIMPLE_DOUBLE . Параметр формат содержит необязательную маску форматирования, определяющую способ представления числа в символьной форме; необязательная строка параметры_nls содержит значения параметров NLS . Ее можно применить для замещения текущих установок параметров NLS уровня сеанса.
Если вы хотите, чтобы результат был представлен в национальном наборе символов, используйте вместо TO_CHAR функцию TO_NCHAR . При этом помните, что строка форматирования числа должна быть представлена символами национального набора; в противном случае полученная строка будет состоять из символов « # ».
Использование TO_CHAR без маски форматирования
Функция TO_CHAR , как и TO_NUMBER , может вызываться без маски форматирования:
Результат выглядит так:
В отличие от TO_NUMBER форма TO_CHAR особой пользы не приносит. Чтобы число лучше читалось, нужно задать как минимум разделитель групп разрядов.
Использование функции TO_CHAR с маской форматирования
При преобразовании числа в символьное представление функция TO_CHAR используется чаще всего с маской форматирования. Например, с ее помощью можно вывести денежную сумму:
В локальном контексте США результат будет выглядеть так:
Элементы форматирования позволяют очень гибко определять формат символьного представления числа. Чтобы лучше понять, как они работают, стоит немного с ними поэкспериментировать. В следующем примере указано, что старшие разряды должны быть заполнены нулями, но при этом элемент форматирования B требует замены нулей пробелами. Данный элемент предшествует цифровым элементам (нулям), но следует за индикатором вывода знака денежной единицы L :
Результат будет иметь следующий вид:
В примере выводится только одна строка, полученная после первого преобразования. В результате второго преобразования получается нуль, и элемент форматирования B заставляет TO_CHAR вернуть пустую строку, хотя в маске форматирования указано, что нулевые старшие разряды числа следует оставить. В качестве эксперимента попробуйте выполнить этот пример без элемента B.
Не все комбинации элементов форматирования являются допустимыми. Например, нельзя использовать сочетание LRN , которое выводит перед числом, записанным римскими цифрами, знак денежной единицы. Oracle не документирует такие нюансы, поэтому о некоторых из них можно узнать только на практике.
Элемент форматирования V
Элемент форматирования V достаточно необычен, чтобы его стоило упомянуть особо. Он позволяет масштабировать значение, а его действие лучше показать на примере (рис. 1).

Рис. 1. Элемент форматирования V
Зачем может понадобиться масштабирование? Рассмотрим простой пример. Стандартная единица сделки на бирже составляет 100 акций, и сообщая о реализованных на бирже акциях обычно говорят о количестве проданных пакетов по 100 акций. Поэтому 123 продажи означает 123 пакета по 100 акций, то есть 12 300 акций.
Следующий пример показывает, как использовать элемент V для масштабирования значения 123, с учетом того, что на самом деле оно представляет количество сотен:
Заметьте, что в этом примере маска форматирования включает элемент G , определяющий местоположение разделителя групп (запятой), который может быть задан только слева от элемента V , что не всегда удобно. Следующая маска форматирования на первый взгляд выглядит вполне разумно:
Вы ожидаете, что результат будет отформатирован в виде 1,234,500, но элемент G не может располагаться справа от V. Можно использовать маску 9G99V9999 для получения результата 1,234500 или маску 999V9999 для получения 1234500, но оба эти результата выглядят не так, как нам хотелось бы.