Как перевести string в int sql
Перейти к содержимому

Как перевести string в int sql

Преобразование типов и оператор CAST стр. 3

Есть одна особенность использования оператора CAST в SQL Server, связанная с преобразованием числа к его строковому представлению. Что произойдет, если число символов в числе превышает размер строки? Например,

Консоль

Выполнить

Следует ожидать, что мы получим сообщение об ошибке. Правильно, вот это сообщение:

Arithmetic overflow error converting numeric to data type varchar.

(«Ошибка арифметического переполнения при преобразовании числа к типу данных VARCHAR».)

Естественно, что мы будем ожидать того же сообщения и при выполнении следующего оператора:

Консоль

Выполнить

Но нет. В результате мы получим символ «*» вместо сообщения об ошибке. Мы не беремся судить, с чем это связано, однако, однажды мы столкнулись с проблемой диагностики ошибки в коде, в котором впоследствии выполнялось обратное преобразование к числовому типу.

В нашем простейшем примере это будет выглядеть так:

Консоль

Выполнить

Вот тут-то мы и получаем ошибку:

Syntax error converting the varchar value ‘*’ to a column of data type int.

(«Ошибка синтаксиса при преобразовании значения «*» к типу данных INT».)

Примечание:

Функция Transact-SQL (T-SQL) — процедурное расширение языка SQL, используемое для программирования на стороне сервера в Microsoft Cистема управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server и Sybase ASE. Transact-SQL CONVERT ведет себя аналогичным образом.

Преобразование типа money

Денежный тип данных не является стандартным. В SQL Server имеется два денежных типа:

money : диапазон значений от –922,337,203,685,477.5808 до 922,337,203,685,477.5807

smallmoney : диапазон значений от -214 748,3648 до 214 748,3647

Точность обоих типов одна десятитысячная.

Константу типа money можно задать с помощью префикса $, или же использовать преобразование типов, например:

Консоль

Выполнить

[PostgreSQL] Как привести строки в INT и другие типы данных?

Есть база PostgreSQL, в одной из таблиц хранятся смешанные значения (т.е. могут быть как текст, так и цифры, так и что угодно ещё), формат поля — VARCHAR.

В некоторые моменты времени, необходимо выбрать все строки, в которых поле N, например, больше 3, например так: SELECT * FROM table1 WHERE field1 > 3;
Но, тут возникает проблема, т.к. field1 не всегда числовое. Я знаю, что в PostgreSQL есть приведения типов, и запрос должен был бы выглядеть примерно так: SELECT * FROM table1 WHERE field1::INTEGER > 3;
Но, как только приведение доходит до нечислового значения — вылетает с ошибкой, «ошибка синтаксиса».

Подскажите пожалуйста, как правильно составить запрос таким образом, что бы всё что можно было привести к нужному типу — автоматически приводилось бы, а всё что нельзя — просто пропускалось бы, без сравнения/приведения?

  • Вопрос задан более трёх лет назад
  • 9629 просмотров

Комментировать
Решения вопроса 1

aklim007

Выбрать только то, что является числом.

SELECT field1::integer FROM table1 WHERE field1 ~ E'^\\d+$' AND field1::integer > 3;

Как перевести string в int sql

Функция CAST имеет следующий синтаксис:

CAST(expression AS type)
CONVERT(expression,type)

где аргумент type представляет один из типов:

Функция CAST() соответствует синтаксису ANSI SQL99, а функция CONVERT() — синтаксису ODBC.

Данная функция приведения типов используется главным образом для создания столбца конкретного типа с помощью команды CREATE . SELECT :

CREATE TABLE new_table SELECT CAST('2000-01-01' AS DATE);

Выражение CAST string AS BINARY эквивалентно BINARY string .

Для преобразования строки в числовую величину обычно не нужно ничего делать: просто используйте строку так, как будто это число:

mysql> SELECT 1+'1'; -> 2

MySQL поддерживает арифметические операции с 64-битовыми величинами — как со знаковыми, так и с беззнаковыми. Если используются числовые операции (такие как +) и один из операндов представлен в виде unsigned integer , то результат будет беззнаковым. Его можно переопределить, используя операторы приведения SIGNED и UNSIGNED , чтобы получить 64-битовое целое число со знаком или без знака соответственно.

mysql> SELECT CAST(1-2 AS UNSIGNED) -> 18446744073709551615 mysql> SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED); -> -1

Следует учитывать, что если один из операндов представлен величиной с плавающей точкой (в данном контексте DECIMAL() рассматривается как величина с плавающей точкой), результат также является величиной с плавающей точкой и не подчиняется вышеприведенному правилу приведения.

mysql> SELECT CAST(1 AS UNSIGNED) -2.0 -> -1.0

Если в арифметической операции используется строка, то результат преобразуется в число с плавающей точкой.

Функции CAST() и CONVERT() были добавлены в MySQL 4.0.2.

В MySQL 4.0 была изменены правила обработки беззнаковых величин, чтобы обеспечить более полную поддержку величин типа BIGINT . Если код необходимо использовать и для MySQL 4.0, и для версии 3.23 (в которой функция CAST , скорее всего, не будет работать), то можно, применив следующий трюк, получить при вычитании двух беззнаковых целочисленных столбцов результат со знаком:

SELECT (unsigned_column_1+0.0)-(unsigned_column_2+0.0);

Идея состоит в том, что перед выполнением вычитания данные столбцы приводятся к типу с плавающей точкой.

Если возникнут проблемы со столбцами типа UNSIGNED в старых приложениях MySQL при переносе их на MySQL 4.0, можно использовать параметр —sql-mode=NO_UNSIGNED_SUBTRACTION при запуске mysqld . Однако следует учитывать, что при этом теряется возможность эффективного использования столбцов типа UNSIGNED BIGINT .

Как перевести string в int sql

Продвинутый SQL

Когда мы выполняем операции со значениями с разными типами данных, СУБД пытается выполнить преобразование и привести используемые значения к нужному типу. Например, в примере ниже мы сравниваем значения с типами STRING и INT . Чтобы выполнить это сравнение MySQL автоматически сконвертирует строковое значение в числовое.

MySQL
SELECT '50' > 49, '50' > 51; 
'50' > 49 '50' > 51
1 0

Но не все преобразования СУБД может сделать автоматически, и тогда необходимо делать явное преобразование типов. Для этого в MySQL есть две очень схожие функции CAST и CONVERT .

MySQL
CAST(значение AS тип_для_конвертации); CONVERT(значение, тип_для_конвертации); 
MySQL
SELECT CAST(12005.6 AS DECIMAL), CONVERT(12005.4, DECIMAL); 
CAST(12005.6 AS DECIMAL) CONVERT(12005.4, DECIMAL)
12006 12005

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *