在sql -server中使用xml查询的结果很奇怪

时间:2014-05-27 10:54:05

标签: sql sql-server xml

这是我的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这怎么可能我怀疑是假的?

1 个答案:

答案 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,4FALSE但是如果至少有一个元素条件为TRUE,则使用上述规则,那么总结果为TRUE

(1,2,3,4)!=1相当于(1,2,3,4)!=(1)来自第二个序列的1,并将TRUE(带!=)与元素进行比较在第一个序列23,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)