首页 > 解决方案 > 看起来相似的2个条件之间的差异

问题描述

当我看到这两个条件时,我的头脑是盲目的,我无法理解有什么区别。有人可以解释一下吗?第一个返回 273 条记录,第二个返回 93 条记录。我认为它们应该返回相同的记录。

第一

    s.value LIKE '%One Travel%'
    OR s.value LIKE '%One RSA%'
    OR s.value LIKE '%One Other%'
    OR s.value LIKE '%GP&U%'
    OR s.value = ' '

第二

    s.value LIKE (
    '%One Travel%'
    ,'%One RSA%'
    ,'%One Other%'
    ,'%GP&U%'
    , ' ')

标签: sqlh2sql-like

解决方案


我根本不知道 H2,但我假设第二个查询的计算结果为:

s.value LIKE '%One Travel%'
    OR s.value LIKE '%One RSA%'
    OR s.value LIKE '%One Other%'
    OR s.value LIKE '%GP&U%'
    OR s.value LIKE ' '

所以你只剩下 和 之间的区别s.value = ' 's.value LIKE ' '。显然 H2 遵循 ANSI SQL,而 ANSI 标准在比较中忽略了尾随空格(实际上要比较的字符串用空格填充,直到它们的长度相同)。所以s.value = ' '返回 TRUE ' ',但也为''' 'LIKE不填充空格进行比较,因为它用于模式匹配而不是相等测试。因此,LIKE ' '只匹配一个空格。

简而言之; 您的第一个查询会返回更多行,因为value还会返回空字符串或多个空格的行。您的第二个查询仅返回value单个空格的行(为简单起见忽略其他条件)。


推荐阅读