Можно ли конвертировать nvarchar в int? - PullRequest
0 голосов
/ 21 июня 2010

Я пробовал что-то вроде этого:

select PREPRO = case when (isnumeric(PREPRO) = 1 and 
PREPRO in ('0','1','-1')) or 
convert(varchar, PREPRO) in ('True','False')
then convert(bit, convert(integer, PREPRO)) else 'No' end
from dbo.TI10SE

PREPRO содержит все "False".

Я получаю эту ошибку:

Преобразование не удалось при преобразовании nvarcharзначение False для типа данных int.

Означает ли это, что nvarchar нельзя преобразовать в целое число?Я думаю, потому что некоторые данные могут быть потеряны.

Ответы [ 3 ]

5 голосов
/ 21 июня 2010

Вы пытаетесь преобразовать PREPRO в целое число, даже если оно содержит True или False:

convert(integer, PREPRO)

Невозможно преобразовать значение False вцелое число.

Условное выражение в предложении when оценивается как true, когда PREPRO - это число в пределах 0, 1, -1 ИЛИ , когда оно оценивается как True или Falseлюбом этих случаев вы пытаетесь преобразовать это значение в целое число, а затем в бит.

1 голос
/ 21 июня 2010

nvarchar можно преобразовать в целое число, если оно содержит целое число

DECLARE @PREPRO VARCHAR(5)
SET @PREPRO = '10'

SELECT CONVERT(integer, @PREPRO)

T-SQL не знает, что ассоциировать с «False» или «True», поэтому вам придется использоватьОператор CASE, подобный выражению rdkleineвернуться?

1 голос
/ 21 июня 2010

Используйте CASE для достижения этой цели:

DECLARE @PREPRO VARCHAR(5)
SET @PREPRO = 'False'
SELECT CASE WHEN @PREPRO = 'False' THEN 0 ELSE 1 END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...