2015-07-31 14 views
5

Ho ereditato un database e un'applicazione da un progetto e sto cercando di eseguire il debug di un problema con una query di database.Cosa significa comando LIKE '[atoz: a]%' in SQL Server?

C'è una linea nella query che recita:

WHERE property_title LIKE '[atoz:a]%' 

sto lottando per capire che cosa il comando Atoz sta facendo come non ho mai incontrato prima - ho pensato che era affermando che sarebbe ammetto solo caratteri nel titolo - ma alcuni dei titoli contengono simboli come() o -

Ho provato a cercarlo su Google ma devo usare la terminologia sbagliata perché non appare nulla. Se qualcuno potesse spiegarmelo o indicarmi una risorsa che sarebbe fantastica!

Grazie

risposta

3

Questa è solo una parte del LIKE operator of T-SQL:

[ ]
Any single character within the specified range ([a-f]) or set ([abcdef]).
WHERE au_lname LIKE '[C-P]arsen' finds author last names ending with arsen and starting with any single character between C and P, for example Carsen, Larsen, Karsen, and so on. In range searches, the characters included in the range may vary depending on the sorting rules of the collation.

L'espressione esatta che stai vedendo:

'[atoz:a]%' 

significa fondamentalmente questo:

  • First ogni singolo ch aracter che può essere uno dei seguenti:
    • a, t, o, z, o :
  • Poi seguito da nulla (anche niente)

noti che atoznon lo fa significa qualsiasi carattere da a a z, significa letteralmente i 4 caratteri a , t, o e z. Per ottenere un personaggio da a a z, utilizzare lo [a-z]. Il secondo a nell'espressione è ridondante, poiché [aa] indica lo stesso valore di [a].

+2

Quindi sembra un errore ... '[atoz: a]' il 'a' viene ripetuto due volte ... e la raccolta di caratteri' a, t, o, z,: '* è * a un po 'strano ... – xanatos

+0

Beh, non farà del male, ma non farà nulla. –

+0

@xanatos. . . La seconda "a" potrebbe essere ridondante e potrebbe essere un errore logico, ma non si tratta di un errore di query: http://www.sqlfiddle.com/#!6/9eecb7d/499. –

4

Questo sta cercando property_title che inizia con le lettere "a", "t", "o", "z" e ":". Il secondo "a" è ridondante.

direi l'intenzione è in realtà:

WHERE property_title LIKE '[a-z]%' 

che specifica che il titolo di proprietà inizia con una lettera (o una lettera minuscola, a seconda delle regole di confronto in uso).