这个T-SQL语句有什么问题?

4
为什么等号出错了?
select IIF((SUBSTRING('A1234', 1, 1) = 'A'), TRUE, FALSE) as IsAustraliaUser

错误:

消息102,级别15,状态1,行1
附近有语法错误 '='。


1
在SQL Server中没有TRUEFALSE文字,但不确定为什么它会突出显示=。对于我在SQL Server 2012(11.0.3128)上没有这种情况。 - Damien_The_Unbeliever
请改用以下方法:select IIF((SUBSTRING('A1234', 1, 1) = 'A'), 1, 0) as IsAustraliaUser - Mansfield
3
刚刚想起来,“IIF” 是 SQL Server 2012 新引入的函数。如果你使用的是早期版本,则会出现问题中所指出的错误。 - Damien_The_Unbeliever
2
这个问题没有展示出任何基本的研究 - 比如查找IIF的文档并检查OP正在使用的服务器版本。 - Damien_The_Unbeliever
1
@Damien_The_Unbeliever 自从我写T-SQL以来已经有一段时间了。许多语言可以将TRUE/FALSE转换为位。我已经找过了,但没有找到我想要的答案。我不明白为什么人们非得恶言相向。如果你不喜欢这个问题,就不要回答它。 - JCleveland
3个回答

6

IIF 是 SQL Server 2012 的一个功能,如果您需要使用,请使用 CASE

SELECT CASE SUBSTRING('A1234', 1, 1)
       WHEN 'A' THEN 'TRUE'
       ELSE 'FALSE'
       END

1
谢谢Darren,已解决。也感谢以下的人。 - JCleveland

1
你应该用CASE替换IIF函数,此外SQL Server中不存在TRUE和FALSE,可以使用VARCHAR或BIT类型。
select CASE WHEN SUBSTRING('A1234', 1, 1) = 'A' THEN 'TRUE' ELSE 'FALSE' END as IsAustraliaUser

@RaphaëlAlthaus,刚刚检查了一下,它只在SQL Server 2012中有效。 - EricZ

1

我认为SQL不支持这种IIF语法(除非你使用的是2012版本),请使用CASE语句替换。

SELECT  CASE WHEN ( SUBSTRING('A1234', 1, 1) = 'A' ) THEN 'TRUE'
             ELSE 'FALSE'
        END AS IsAustraliaUser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接