Оператор SQL, а затем преобразовать в int - PullRequest
0 голосов
/ 01 октября 2019

У меня есть поле, которое я хочу преобразовать в int, поэтому я могу в count, однако некоторые значения поля 'null', поэтому я получаю исключение, когда они сталкиваются с этими

Conversion failed when converting the nvarchar value '_____' to data type int.

Я думал, что id может сделать что-то подобное ниже, но я получаю тот же результат.

CAST( CASE [value] WHEN 'is null' THEN 1 ELSE [value] END AS INT) 

Я хочу изменить все значения null в [value] на 1, а затемизмените все [значение] на int, чтобы я мог рассчитать это поле.

Ответы [ 3 ]

1 голос
/ 01 октября 2019

У вас не должно возникнуть проблем при преобразовании значения NULL в int, поэтому я предполагаю, что проблема заключается в строке 'NULL'.

SQL Server предлагает TRY_CONVERT(). Я рекомендую использовать это;

select try_convert(int, [value])

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

0 голосов
/ 01 октября 2019

Поскольку вы на самом деле не ищете NULL - отсутствие данных. У вас неверные данные, то есть фактический текст 'NULL' в столбце.

Я бы действительно порекомендовал вам обновить все значения до NULL, чтобы вы могли избежать попытки приведения данных для решения вашей проблемы. Это будет что-то вроде:

UPDATE yourtable
SET [value] = NULL
WHERE [value] = 'NULL'

Тогда я бы также изменил столбец на истинный INT тип, чтобы избежать этого в будущем. Но это немного выходит за рамки вашего вопроса.

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

0 голосов
/ 01 октября 2019

это будет is null, а не строка

CAST( (CASE WHEN [value]  is null THEN 1 ELSE [value] END) AS INT) 

, но лучше использовать try_convert, что на самом деле @Gordon рекомендует

...