2010-09-07 8 views
41

utilizza SQL Server 2008. Ho una tabella con le seguenti colonne:SQL Server come i personaggi della staffa contenente

sampleData (nvarchar(max)) 

Il valore per questa colonna in alcuni di questi file sono elenchi formattati come segue:

["value1","value2","value3"] 

Sto provando a scrivere una semplice query che restituirà tutte le righe con liste formattate in questo modo, rilevando solo la parentesi aperta.

SELECT * from sampleTable where sampleData like '[%' 

La query sopra non funziona perché '[' è un carattere speciale, e non posso per la vita di me capire come sfuggire alla staffa in modo mia domanda fa quello che voglio.

Grazie per eventuali suggerimenti!

risposta

57
... like '[[]%' 

si utilizza [ ] per circondare un carattere speciale (o intervallo)

vedere la sezione "Utilizzo dei caratteri jolly come valori letterali" a SQL Server LIKE

Modifica, 24 Nov 2011

Nota: Non è necessario sfuggire alla staffa di chiusura ...

23

A parte la risposta di gbn, l'altro metodo è utilizzare ESCAPE opzione:

SELECT * from sampleTable where sampleData like '\[%' ESCAPE '\' 

Vedere la documentation per i dettagli

2

Basta una ulteriore nota qui ... Se si desidera includere la staffa (o altre promozioni) all'interno di un insieme di caratteri, si hanno solo la possibilità di usare ESCAPE (dato che stai già usando le parentesi per indicare il set). Inoltre, DEVI specificare la clausola ESCAPE, poiché non esiste un carattere di escape predefinito (non è il backslash di default come ho pensato inizialmente, provenendo da uno sfondo C).

ad es. se voglio tirare fuori righe in cui una colonna contiene nulla al di fuori di un insieme di caratteri 'accettabili', per amor di discussione diciamo alfanumerici ... potremmo cominciare con questo

SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9]%' 

Quindi stiamo ritornando nulla che ha qualche carattere non nella lista (a causa del carattere principale caret ^).

Se poi vogliamo aggiungere caratteri speciali in questo set di caratteri accettabili, non possiamo nido, le staffe in modo dobbiamo usare un carattere di escape, come questo ...

SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9\[\]]%' ESCAPE '\' 

precedente le staffe (singolarmente) con un backslash e indicando che stiamo usando il backslash per il carattere di escape ci permette di sfuggire a loro all'interno delle parentesi di funzionamento che indicano il set di caratteri.

Ci scusiamo per l'esempio stupido, ma spero che aiuta qualcuno

+0

così noi siamo fuori di fortuna se stiamo usando PATINDEX? – Sam

Problemi correlati