这方面有空吗?
是否存在匹配任何或null的通配符?
另一个是说它在零或一个匹配。
select [id], [word] from [FTSwordDef]
where [word] like 'system_'
or [word] like 'system'
答案 0 :(得分:3)
是的,有一种更短的方式,但它可能会使您的查询不是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。
答案 1 :(得分:1)
效率极低,我更喜欢Andriy's answer,但您可以使用通配符并比较长度。
select [id], [word] from [FTSwordDef]
where [word] like 'system%'
and LEN([word]) <= LEN('system%')
答案 2 :(得分:-3)
不。
http://msdn.microsoft.com/en-us/library/ms179859.aspx
如果百分比字符不起作用,则需要OR。这是该条款的一个额外部分,所以是的,它不太干净,但是首先使用LIKE会导致效率低下。经验法则是,如果可能,请尽量避免使用LIKE。