我正在尝试将此查询从Microsoft访问转换为 SQL Server 2012 。
SELECT
IIF(IsNull(Letter), '', CalculationType) AS [BF NI Calculation Basis]
FROM NICs
我将它转换为以下内容,但我一直收到错误:
Msg 245,Level 16,State 1,Line 1转换时转换失败 varchar值' A'数据类型int。
这就是我的尝试:
SELECT
CHOOSE(ISNULL(Letter,0), '', CalculationType) AS [BF NI Calculation Basis]
FROM NICs
和
SELECT
IIF(Letter = 0, '', CalculationType) AS [BF NI Calculation Basis]
FROM NICs
答案 0 :(得分:1)
从 true_value 和 false_value 中的类型返回优先级最高的数据类型。它表示在您的查询中,true_value是''(字符串),false_value是CalculationType(它是int),这就是您收到此错误的原因。
所以你的查询应该是这样的。
SELECT
IIF(Letter = '0', 0, CalculationType) AS [BF NI Calculation Basis]
FROM NICs
答案 1 :(得分:1)
如果要检查Letter是否为空而不是写:
SELECT
IIF(Letter IS NULL, '', CalculationType) AS [BF NI Calculation Basis]
FROM NICs
如果您想检查字母值0
SELECT
IIF(Letter ='0', '', CalculationType) AS [BF NI Calculation Basis]
FROM NICs
答案 2 :(得分:1)
我认为这是您正在寻找的查询:
SELECT CASE
WHEN Letter IS NULL THEN ''
ELSE CAST(CalculationType AS NVARCHAR(MAX)
END AS [BF NI Calculation Basis]
FROM NICs
这是[BF NI计算基础]列为NVARCHAR的解决方案。
希望这会有所帮助。
答案 3 :(得分:0)
这就是你需要的吗?
SELECT
CASE
WHEN (ISNULL(Letter,0)) = '' THEN CalculationType ELSE ISNULL(Letter,0)
END AS [BF NI Calculation Basis]
FROM NICs
看看这个:
create table #NICs
(
Letter int,
CalculationType int
)
insert into #NICs values (1,100)
insert into #NICs values (null,200)
insert into #NICs values ('',300)
SELECT
CASE
WHEN (ISNULL(Letter,0)) = '' THEN CalculationType ELSE ISNULL(Letter,0)
END AS [BF NI Calculation Basis]
FROM #NICs
drop table #NICs
编辑:
SELECT
CASE
WHEN (ISNULL(try_parse(Letter as int),0)) = '' THEN CalculationType ELSE ISNULL(try_parse(Letter as int),0)
END AS [BF NI Calculation Basis]
FROM #NICs