2016-03-10 19 views
5

Si consideri la seguente tabellaSelezione in base a carattere Thorn MS SQL Server

Words Table

creato tramite:

CREATE TABLE WORD_TEST(WORD NVARCHAR(100)); 

INSERT INTO WORD_TEST(WORD) VALUES('these'),('are'),('some'),('test'),('words'),('including'),('puþpies'),('with'),('parents'); 

Avviso il carattere Thorn (þ) nella parola di puþpies.

Ora, se voglio fare qualcosa di simile a trovare tutti i file che hanno questo personaggio in essa vorrei provare qualcosa di simile

SELECT * FROM WORD_TEST WHERE WORD LIKE '%þ%'; 

che dà il risultato

enter image description here

Ma il problema è che corrisponde anche a qualsiasi "th" nelle parole. Ho anche provato le seguenti variazioni che producono lo stesso risultato.

SELECT * FROM WORD_TEST WHERE WORD LIKE N'%þ%'; 
SELECT * FROM WORD_TEST WHERE WORD LIKE '%' + NCHAR(254) + '%'; 

Come selezionare in base solo alle parole che contengono quel carattere?

+2

Questo vi aiuterà a: http://stackoverflow.com/a/29013145/2203084 –

+4

'SELECT * FROM WORD_TEST WHERE WORD LIKE '% þ%' COLLATE Latin1_General_100_BIN2;' –

+0

@FelixPamittan Grazie all'aggiunta della fascicolazione, il trucco. A quanto pare ho bisogno di criteri di ricerca migliori come non ho mai trovato quella risposta! –

risposta

1

Un'alternativa al suggerimento di Felix di modificare la dichiarazione SELECT sarebbe quello di impostare le regole di confronto della colonna WORD durante la creazione della tabella in modo che essa non getta il carattere spina a qualcos'altro (a quanto pare th in questo caso):

CREATE TABLE WORD_TEST(WORD NVARCHAR(100) COLLATE Latin1_General_100_BIN2); 

Ora fare la vostra dichiarazione SELECT dovrebbe dare i risultati attesi:

SELECT * FROM WORD_TEST WHERE WORD LIKE '%þ%'; 
+0

Grazie, Sì, la raccolta fa il trucco, sfortunatamente non riesco a cambiare la creazione della tabella, l'ho aggiunta solo per scopi di prova/visualizzazione. Tuttavia, aggiungendolo ai criteri di selezione, Felix ha sottolineato che risolve il problema. –