编辑:问题解决了。这是我的阅读不正确,而不是SQL:p
嗨!
我刚刚在我的数据库书中读到了LIKE SQL语句。它说:
SELECT whatever FROM whereever WHERE 'Jeff' LIKE 'Jeff';
它继续说声明'杰夫'喜欢'杰夫'总是会回归假。这本书没有告诉我原因,也没有在其他地方找到这个。这是否意味着以下SQL也会返回null?
SELECT W.name FROM whereever W WHERE w.name LIKE 'Jeff';
供参考,这本书是: 数据库管理系统:Ramakrishnan - Gehrke 来自McGRAW - Hill。国际版。国际标准书号0-07-123151-X第140页。
答案 0 :(得分:10)
我看了一下那个页面(亚马逊“在this book内搜索”),你遗漏的关键是作者在那里指出了空白。这本书实际上说
Thus, 'Jeff'='Jeff ' is true, while 'Jeff' LIKE 'Jeff ' is false.
注意空格!
为了弄清楚错误发生的原因,这里是文字:
由于空间位于线的末端,因此很难看到。但正如我在下文所述,如果那里没有空格,引号将不会换行到下一行。
答案 1 :(得分:2)
MySQL会不同意你的书(不确定其他DBMS):
mysql> SELECT 'Jeff' LIKE 'Jeff';
+--------------------+
| 'Jeff' LIKE 'Jeff' |
+--------------------+
| 1 |
+--------------------+
1 row in set (0.00 sec)
答案 2 :(得分:0)
不确定为什么会这么说 - '杰夫'就像'杰夫'一样。在这种情况下,它将返回'whereever'
中的所有行在你的第二个陈述中,它只会返回'name'列恰好是'Jeff'的行。如果它是'杰夫某事',它将不会返回。如果你想返回类似的东西,那么你必须做'w.name like'Jeff%'之类的事情。还有更多这方面的变化,我相信你会在阅读更多内容时发现......
答案 3 :(得分:0)
它可能取决于DBMS的实现,但是如果你运行“select'jeff'就像'jeff';”从MySQL返回“1”(又名真)。
答案 4 :(得分:0)
完全错误。以下语句返回'Y'(因为条件的计算结果为true:
select 'Y' where 'Jeff' LIKE 'Jeff'
...虽然此语句不返回任何行(因为它的计算结果为false):
select 'Y' where 'Jeff' LIKE 'John'
我不知道这些作者在想什么,但是没有任何通配符的比较是完全可以接受的;左侧和右侧在语义上进行比较以确保完全相等。
答案 5 :(得分:0)
本书的这一部分涉及空白。他们在sql中说,
'杰夫'='杰夫'(注意额外的空格)导致TRUE,但
''杰夫'喜欢'杰夫'(再次,额外的空格)导致错误希望能够解决问题。