是否可以将nvarchar转换为int?

时间:2010-06-21 13:47:44

标签: sql-server tsql

我尝试过这样的事情:

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 个答案:

答案 0 :(得分:5)

您正试图将PREPRO转换为整数,即使它所包含的值为TrueFalse

convert(integer, PREPRO)

您无法将值False转换为整数。

PREPRO是一个0,1,-1 OR 中的数字,当它评估为True或{{1>时,你的when子句中的条件求值为真}}。在任何这些情况下,您尝试将此值转换为整数然后转换为位。

答案 1 :(得分:1)

使用CASE来完成此任务:

DECLARE @PREPRO VARCHAR(5)
SET @PREPRO = 'False'
SELECT CASE WHEN @PREPRO = 'False' THEN 0 ELSE 1 END

答案 2 :(得分:1)

如果nvarchar包含整数

,则可以将其转换为整数
DECLARE @PREPRO VARCHAR(5)
SET @PREPRO = '10'

SELECT CONVERT(integer, @PREPRO)

T-SQL不知道与'False'或'True'相关联的内容,所以你必须使用像rdkleine这样的CASE语句。

同样在本声明中:

convert(bit, convert(integer, PREPRO)) else 'No' end

你会收到一个错误,因为'不'不是类型的位,你想要返回什么?