这是我的xml query
declare @x xml=N'';
select @x.query('(1,2,3,4)=1') --1 /* Returns True */
select @x.query('(1,2,3,4)!=1')--2 /* Returns True...how is this possible*/
对于第一种情况,值为True
,因为左序列中的原子值等于1(左原子值)
但对于第二种情况也是True
这怎么可能我怀疑是假的?
答案 0 :(得分:3)
根据Comparison Expressions (XQuery):
使用一般比较比较两个序列时 运算符和值存在于比较True的第二个序列中 对于第一个序列中的值,整体结果为True。 否则,它是假的。例如,(1,2,3)=(3,4)为True, 因为值3出现在两个序列中。
(1,2,3,4)=1
相当于(1,2,3,4)=(1)
,在这种情况下,1
存在于第一个序列中,因此它是TRUE
。虽然对于2,3,4
它FALSE
但是如果至少有一个元素条件为TRUE
,则使用上述规则,那么总结果为TRUE
。
(1,2,3,4)!=1
相当于(1,2,3,4)!=(1)
来自第二个序列的1
,并将TRUE
(带!=
)与元素进行比较在第一个序列2
或3,4
中,我们得到了总体结果 - TRUE
。
更多例子:
(1,2,3,4)>3 - TRUE (4 > 3)
(1,2,3,4)<3 - TRUE (1,2 <3)
(1,2,3,4)<5 - TRUE (1,2,3,4 < 5)
(1,2,3,4)>5 - FALSE (There is no element from the first sequence > 5 )
因此,如果至少一个元素条件为TRUE,那么整体结果为TRUE。
将其视为OR
:
(1,2,3,4)!=1 => (1!=1) OR (2!=3) OR (3!=3) OR (4!=3)