2013-02-21 15 views

risposta

3

Sì, c'è un modo più breve, ma sarebbe probabilmente fare la vostra richiesta non sargable (a meno che non sia già così):

WHERE word + ' ' LIKE 'system_' 

Funziona perché qualsiasi spazio extra sul lato sinistro della LIKE è ignorato, mentre, se non è extra, cioè se si trova entro la lunghezza dell'argomento della parte destra, prende parte alla corrispondenza della stringa del modello come qualsiasi altro carattere.

Così, per esempio, tutti i seguenti si tradurrebbe in true:

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

In (1), lo spazio corrisponde al _ della stringa modello. In (2), è A che corrisponde allo _. In (3), è anche A mentre lo spazio non viene preso in considerazione.

Ecco un piccolo demo piacevole per illustrare questo: http://sqlfiddle.com/#!3/d41d8/9521.

+0

Fammi provare. – Paparazzi

+0

Con il problema in mano non posso davvero usarlo ma è una risposta alla domanda indicata. – Paparazzi

-3

No.

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

Se un personaggio per cento non lo farà, avrete bisogno di un OR. È una parte extra della clausola quindi sì è meno pulito, ma usare LIKE in primo luogo introduce comunque delle inefficienze. La regola generale è, se possibile, evitare LIKE, se le prestazioni sono un problema.

+2

Perché questo corrisponderebbe anche a 'system22222'. –

+0

Ok. Aggiornato la mia risposta. – ty733420

+0

Come è la no ed evita COME una risposta alla domanda? Senza LIKE 'system_' viene valutato come carattere jolly letterale e non come singolo carattere. – Paparazzi

0

Orribilmente inefficiente e preferirei Andriy's answer, ma si potrebbe usare caratteri jolly e confrontare anche la lunghezza.

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

OK restituisce la risposta corretta. Ma non è una scorciatoia in cui [parola] come "sistema_" o [parola] come "sistema" – Paparazzi

Problemi correlati