вставить и преобразовать ноль в 0 - PullRequest
4 голосов
/ 11 февраля 2011

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

Insert into MyNewTable (A, B, C) select (AA, BB, CC) from MyOldTable

И CC может быть нулевым

спасибо за любую помощь

Ответы [ 3 ]

6 голосов
/ 11 февраля 2011

Просто используйте ISNULL()

Insert into MyNewTable (A, B, C) select (AA, BB, ISNULL(CC,0)) from MyOldTable
5 голосов
/ 11 февраля 2011

Вы можете использовать обе функции IsNull(a, b) или Coalesce(a, b, c, ...), где IsNull возвращает значение «b», если «a» равно нулю, а Coalesce возвращает первый ненулевой аргумент.Важным отличием является то, что IsNull () принудительно приводит приведение (или преобразование) "b" к типу "a", в то время как тип возвращаемого значения Coalesce совпадает с возвращаемым аргументом, что позволяет движку пробовать любое преобразование только ПОСЛЕ оценкифункции.

Т.е., если столбец "a" имеет тип данных int, запись IsNull(a, '1') в порядке, но IsNull(a, 'hello') вызывает ошибку преобразования, в то время как запись Coalesce(a, 'hello') разрешена, иошибка будет возникать только в том случае, если a равно нулю, и вы, например, пытаетесь вставить возвращенное значение ('hello') в столбец int, но выполняете автоматическое преобразование значения a (если нетnull) при вставке в столбец varchar.

1 голос
/ 11 февраля 2011

Для этого можно использовать функцию coalesce:

INSERT INTO MyNewTable (A, B, C)
SELECT COALESCE(AA, 0), COALESCE(BB, 0), COALESCE(CC, 0) FROM MyOldTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...