2013-02-21 12 views

Odpowiedz

3

Tak, jest krótsza droga, ale to prawdopodobnie zrobić zapytanie nie- sargable (o ile nie jest to już tak):

WHERE word + ' ' LIKE 'system_' 

To działa, ponieważ każda dodatkowa przestrzeń po lewej stronie jest LIKE zignorowane, podczas gdy, jeśli nie jest dodatkowe, tj. jeśli znajduje się w zakresie długości argumentu prawej strony, bierze udział w dopasowywaniu ciągu wzorców, jak każdy inny znak.

Tak więc, na przykład, wszystkie z poniższych skutkowałoby true:

(1) 'system ' LIKE 'system_' 
(2) 'systemA' LIKE 'system_' 
(3) 'systemA ' LIKE 'system_' 

w punkcie (1), przestrzeń odpowiada _ łańcucha wzorca. W (2) jest to A, które pasuje do _. W (3) jest również A, podczas gdy spacja jest pomijana.

Oto ładne demo, aby to zilustrować: http://sqlfiddle.com/#!3/d41d8/9521.

+0

Pozwól mi przetestować to. – Paparazzi

+0

Z tym problemem nie mogę tak naprawdę skorzystać, ale jest to odpowiedź na zadane pytanie. – Paparazzi

-3

Nie.

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

Jeśli postać procent nie zrobi, trzeba OR. Jest to dodatkowa część klauzuli, więc tak jest mniej czysta, ale używanie LIKE w pierwszej kolejności wprowadza i tak nieefektywność. Zasada jest taka: unikaj LIKE, jeśli to możliwe, jeśli wydajność jest problemem.

+2

Ponieważ to również pasuje do 'system22222'. –

+0

Ok. Zaktualizowałem moją odpowiedź. – ty733420

+0

W jaki sposób należy unikać odpowiedzi na pytanie? Bez LIKE "system_" jest oceniany jako literał, a nie pojedynczy znak wieloznaczny. – Paparazzi

0

Strasznie nieefektywny i wolałbym Andriy's answer, ale można użyć symbolu wieloznacznego, a także porównać długość.

select [id], [word] from [FTSwordDef] 
    where [word] like 'system%' 
    and LEN([word]) <= LEN('system%') 
+0

OK zwraca poprawną odpowiedź. Ale nie jest skrótem do tego, gdzie [słowo] jak "system" lub [słowo] jak "system" – Paparazzi

Powiązane problemy