8

这有短手吗?
是否有匹配任何或空的通配符?
另一个是说它是匹配零或一。

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

3 回答 3

6

是的,有一种更短的方法,但它可能会使您的查询不可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 。

于 2013-02-24T23:27:29.553 回答
1

效率极低,我更喜欢Andriy 的答案,但您可以使用通配符并比较长度。

select [id], [word] from [FTSwordDef]
  where [word] like 'system%'
    and LEN([word]) <= LEN('system%')
于 2013-02-25T00:31:58.503 回答
-3

没有。

http://msdn.microsoft.com/en-us/library/ms179859.aspx

如果百分比字符不起作用,则需要 OR。这是该子句的一个额外部分,所以是的,它不太干净,但首先使用 LIKE 会导致效率低下。经验法则是,如果可能,请避免 LIKE,如果性能是一个问题。

于 2013-02-21T19:52:28.240 回答