这个比较是什么意思,为什么它既不显示true也不显示false?

3

我尝试以下代码,结果得到了两列的数值。

declare @aa varchar(10) = 'bb'
declare @bb varchar(10) = 'aa'
select @aa, @bb

接下来我尝试了以下操作,但无法解释结果。除了命令执行成功的提示外,我什么也看不到。

declare @aa varchar(10) = 'bb'
declare @bb varchar(10) = 'aa'
select @aa = @bb

我在这里做了什么?我期望的是真/假或1/0或一个错误。
3个回答

4

select @aa = @bb 的作用与 SET @aa = @bb 相同。

使用 IIF 进行比较:SELECT IIF(@aa = @bb, '相同', '不同')

SqlFiddle演示

对于不等式:SELECT IIF(@aa <> @bb, '不同', '相同')

一般情况下:SELECT IIF((条件), 1, 0) ,其中 1 表示为真,0 表示为假。


我在等号处遇到语法错误。这个命令(如果是的话)对于其他数据库是否有效呢?我正在使用 Sql Server 14。我认为这样一个基本操作在所有版本中肯定应该具有相同的语法,但是“假设”部分建立在“屁股”上,这可能就是我的问题所在了... - Konrad Viltersten
@KonradViltersten 请查看我的更新答案,我附上了实时演示。 - Lukasz Szozda

2

在查询中进行比较:

select
    case 
        when @aa = @bb then 'MATCH'
        else 'NOT MATCH'
    end

您正在进行的操作:

select @aa, @bb

上面的代码选择了两个变量中存储的值作为单独的“列”。
select @aa = @bb

上述代码将变量@aa的值设为@bb的值。

跟进这个问题 - 如果我想比较字符串在平等性方面的不同,而不是相等性,怎么办?假设我希望比较第一个字符串是否按字母顺序排在第二个字符串前面。在“when”条件中使用不等式符号可以吗?还是以后会出现问题? - Konrad Viltersten

1
您并不是在比较变量,而是在赋值变量。= 操作符将会赋予变量值。
您可以尝试这样做:
declare @aa varchar(10) = 'bb'
declare @bb varchar(10) = 'aa'
if(@aa = @bb)
    print  'Match'
else
    print  'Not Match'

或者更紧凑地使用 IIF
SELECT IIF(@aa = @bb, 'Match', 'Not Match')

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