我尝试过这样的事情:
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无法转换为整数?我猜是因为有些数据可能会丢失。
答案 0 :(得分:5)
您正试图将PREPRO
转换为整数,即使它所包含的值为True
或False
:
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
你会收到一个错误,因为'不'不是类型的位,你想要返回什么?