Чего ожидать при использовании оператора плюс для разных типов в SQL? - PullRequest
1 голос
/ 14 мая 2011

Мне было интересно, существует ли определенный стандартный ответ SQL при использовании оператора + среди различных типов данных.

т.е. SELECT (int_col + char_col + float_col) AS mixed_value

Ответы [ 2 ]

2 голосов
/ 14 мая 2011

Оператор знака плюс был определен начиная с ANSI SQL-86, первого стандарта SQL.Он определяет, помимо прочего, сложение между числами, интервалами, датами и интервалами.Не существует стандартного метода обработки оператора со знаком плюс с символьными данными.

0 голосов
/ 14 мая 2011

Если вы включаете столбец char, вы получите ошибку преобразования при попытке выполнить запрос, если в поле char нет чего-то, что можно преобразовать в число. Система сложит числа вместе, если они все числа. Он преобразует int в число с плавающей точкой. Вот некоторые тестовые данные:

/* Appending all three types together */
SELECT (int_field + char_field + float_field) AS NewField
FROM DataTypes
/* Results: Success only when the char can be converted to a number
Conversion failed when converting the varchar value 'test      ' to data type int.
*/

/* Appending only numeric types (float and int) */
SELECT (int_field + float_field) AS NewField
FROM DataTypes
/* Results: Success */

/* Appending char and int types */
SELECT (char_field + int_field) AS NewField
FROM DataTypes
/* Results: Succes only when the char can be converted to a number
Conversion failed when converting the varchar value 'test      ' to data type int. */


/* Appending char and nvarchar types */
SELECT (char_field + nvarchar_field) AS NewField
FROM DataTypes
/* Results: Success */

Обратите внимание, что в последней паре результатов, если есть только текстовые поля, они будут добавляться друг к другу. Однако, если присутствует хотя бы одно числовое поле, система пытается преобразовать их все в числовое, независимо от порядка. Всякий раз, когда используется оператор плюс, если хотя бы одно поле является числовым, система предполагает, что операция является дополнением, а не добавлением.

Это было проверено на SQL Server 2008.

...