这有短手吗?
是否有匹配任何或空的通配符?
另一个是说它是匹配零或一。
select [id], [word] from [FTSwordDef]
where [word] like 'system_'
or [word] like 'system'
这有短手吗?
是否有匹配任何或空的通配符?
另一个是说它是匹配零或一。
select [id], [word] from [FTSwordDef]
where [word] like 'system_'
or [word] like 'system'
是的,有一种更短的方法,但它可能会使您的查询不可sargable(除非它已经如此):
WHERE word + ' ' LIKE 'system_'
它之所以起作用,是因为左侧的任何额外空间都LIKE
被忽略了,而如果它不是额外的,即如果它在右侧参数的长度范围内,它会像任何其他字符一样参与匹配模式字符串。
因此,例如,以下所有情况都会导致true
:
(1) 'system ' LIKE 'system_'
(2) 'systemA' LIKE 'system_'
(3) 'systemA ' LIKE 'system_'
在 (1) 中,空格与_
模式字符串的 匹配。在 (2) 中,它A
与_
. 在(3)
中,也A
同时忽略了空间。
这是一个很好的小演示来说明这一点:http ://sqlfiddle.com/#!3/d41d8/9521 。
效率极低,我更喜欢Andriy 的答案,但您可以使用通配符并比较长度。
select [id], [word] from [FTSwordDef]
where [word] like 'system%'
and LEN([word]) <= LEN('system%')
没有。
http://msdn.microsoft.com/en-us/library/ms179859.aspx
如果百分比字符不起作用,则需要 OR。这是该子句的一个额外部分,所以是的,它不太干净,但首先使用 LIKE 会导致效率低下。经验法则是,如果可能,请避免 LIKE,如果性能是一个问题。