通配符匹配一个或零个字符

时间:2013-02-21 19:50:20

标签: sql-server-2008 tsql wildcard

这方面有空吗?
是否存在匹配任何或null的通配符?
另一个是说它在零或一个匹配。

select [id], [word] from [FTSwordDef]
 where [word] like 'system_'
    or [word] like 'system'

3 个答案:

答案 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。