FUNZIONI STRINGA

martedì 15 luglio 2008 - 15.49

Marylight Profilo | Newbie

Salve,
Ho un campo stringa nel formato ntext.
Devo trovare tutte le stringhe che contengono le parole Inquire e Response o viceversa Response e Inquire.
La stringa contiene tutta una serie di informazioni tra cui caratteri tipo .
Come faccio a recuperare l'informazione che mi serve?

lbenaglia Profilo | Guru

>Devo trovare tutte le stringhe che contengono le parole Inquire
>e Response o viceversa Response e Inquire.

Una soluzione potrebbe essere simile a questa:

USE tempdb; CREATE TABLE dbo.myTable( myString ntext NOT NULL ); INSERT dbo.myTable VALUES(N'Stringa 1'); INSERT dbo.myTable VALUES(N'Inquire'); INSERT dbo.myTable VALUES(N'Response'); INSERT dbo.myTable VALUES(N'blabla Inquire blabla Response blabla'); INSERT dbo.myTable VALUES(N'blabla Response blabla Inquire blabla'); SELECT * FROM dbo.myTable WHERE myString LIKE N'%Inquire%' AND myString LIKE N'%Response%'; /* Output: myString -------------------------------------- blabla Inquire blabla Response blabla blabla Response blabla Inquire blabla (2 row(s) affected) */ DROP TABLE dbo.myTable;

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Marylight Profilo | Newbie

Eseguendo la query mi estrae anche i record che contengono una sola delle parole che mi interessano. A me interessa estrarre i record che contengono entrambe le parole

lbenaglia Profilo | Guru

>Eseguendo la query mi estrae anche i record che contengono una
>sola delle parole che mi interessano.

Dato che le due LIKE sono in AND devono essere entrambe soddisfatte, quindi quello che affermi non è possibile
Io utilizzo questa versione di SQL Server 2005, e tu?:

SELECT @@VERSION; /* Output: Microsoft SQL Server 2005 - 9.00.3257.00 (Intel X86) Jun 12 2008 18:38:26 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 6.0 (Build 6001: Service Pack 1) */

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Marylight Profilo | Newbie

Utilizzo SQL SERVER 2000 (SP4)

lbenaglia Profilo | Guru

>Utilizzo SQL SERVER 2000 (SP4)
Non ho più a disposizione SQL Server 2000 per fare dei test.... ma hai provato a ricopiare per filo e per segno il mio esempio?

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Marylight Profilo | Newbie

Si certamente

lbenaglia Profilo | Guru

>Si certamente

Ho fatto eseguire l'esempio che ti ho proposto a Gianluca Hotz (SQL Server MVP) su questa istanza:

Microsoft SQL Server 2000 - 8.00.2273 (Intel X86) Mar 7 2008 22:19:58 Copyright (c) 1988-2003 Microsoft Corporation Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)

Il risultato è identico al mio su 2005, ovvero:

SELECT * FROM dbo.myTable WHERE myString LIKE N'%Inquire%' AND myString LIKE N'%Response%'; /* Output: myString -------------------------------------- blabla Inquire blabla Response blabla blabla Response blabla Inquire blabla (2 row(s) affected) */

Boh, non so che dirti...

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Marylight Profilo | Newbie

Grazie comunque

Brainkiller Profilo | Guru

>Si certamente

Sei sicura che da Query Analyzer tu vedi solo una preview cioè un contenuto parziale della tua colonna text/ntext che ti fa ritenere che ci sia solo una delle due parole che hai cercato (magari una delle due è visualizzata nella preview) e magari se allarghi la colonna vedi anche il resto e c'è anche la seconda ?

Oppure sei sicura di aver digitato correttamente le parole da ricercare sia nella query e anche nel testo text/ntext ?

Ti sembreranno domande sciocche, ma verifica.

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

Marylight Profilo | Newbie

Si, sono sicura. Ho verificato entrambe le cose.

Brainkiller Profilo | Guru

>Si, sono sicura. Ho verificato entrambe le cose.

Allora secondo te quale potrebbe essere il problema ?
Che SQL Server è rotto ?

Per capire la causa prova a tornare indietro, esegui l'esempio di Lorenzo su una tabella nuova e vedi se funziona.

Se funziona, inserisci nei campi il testo presente nella tua tabella e riprova.

Andando per esclusione capirai dov'è il problema.

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

Marylight Profilo | Newbie

Può essere che la stringa ha caratteri "sporchi"?

lbenaglia Profilo | Guru

>Può essere che la stringa ha caratteri "sporchi"?
Il mio esempio non ha "caratteri sporchi" ma tu hai asserito che non funziona.
Proprio sicura di averlo eseguito in toto (da USE tempdb fino alla fine)?

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Marylight Profilo | Newbie

iL TUO ESEMPIO CON I TUOI DATI FUNZIONA PERFETTAMENTE. SULLA MIA BASE DATI NON VA.

lbenaglia Profilo | Guru

>iL TUO ESEMPIO CON I TUOI DATI FUNZIONA PERFETTAMENTE. SULLA
>MIA BASE DATI NON VA.

1) Non scrivere in maiuscolo, è maleducazione e significa urlare
2) Non poitevi dirlo prima? Te l'ho chiesto più volte...

Come diceva David, di default il Query Analyzer visualizza al più 256 caratteri per colonna.
Dato che la colonna ntext può memorizzare 2^30 - 1 caratteri unicode, è probabile che le righe restituite siano troncate, quindi A TE sembra che la query non stia funzionando.
Dal menu Options puoi modificare fino a 8000 il numero di caratteri restituiti, ma questo cambierebbe di poco la situazione.

Quindi ricapitolando, la query funziona.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alexmed Profilo | Guru

Ciao a tutti,
Premesso che non sono l'esperto di turno e che a me funziona (SQL 2005 Express)

volevo solo dare un consiglio a Marylight

Prova inizialmente con le prime lettere:

WHERE myString LIKE N'%I%' AND myString LIKE N'%R%'

per poi incrementare:

WHERE myString LIKE N'%In%' AND myString LIKE N'%Re%'

Se non funziona neanche così è "probabile" che ci sia qlq errore di sintassi

Ciao

Marylight Profilo | Newbie

Avevo il caps lock attivo e nella fretta non ho cambiato l'impostazione. Non volevo urlare. Comunque grazie per l'informazione. Ho cambiato impostazione al query analyzer e visualizzo correttamente quanto mi serve.
Grazie ancora
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5