为什么这个SQL查询似乎缺少一个空间?

时间:2015-08-03 19:26:13

标签: sql sql-server

我的一位朋友发现了这一点,我测试了它并在SQL Server Management Studio中进行了确认。如果您找到的列为INT,则可以查询:

select * 
from table 
where foo = 1AND 1=1; /* works no problem */

请注意,1和AND之间没有空格。我们想知道为什么这不是SQL的问题。这是一种已知的SQL行为吗?

2 个答案:

答案 0 :(得分:9)

Transact-SQL Reference: Data Types: Constants页面列出了常量的有效语法。 1是有效常量。 1A不是任何可能的有效常量的开头,因此解析器停止在那里读取。

请注意,它与所有字母的效果不同:E可以出现在数字中。因此,select 1except select 1仍然有效,但不是您所期望的。这被解析为select 1e as xcept,其中省略了可选关键字as,然后是另一个语句select 1。它与select 1 except select 1完全不同。

答案 1 :(得分:2)

1=11+1没有区别。见sqlfiddle

select case when 'a'in('a','b')then'a'else'b'end;

MySQL btw中的结果相同。