Newsgroup: it.comp.www.asp
Titolo: Ricerca parole intere

In una pagina ASP ho una query SQL che deve restituire i records
contententi, in un campo, una parola intera.
Se scrivo:
 "SELECT * FROM [ElencoDocumenti] " & _
 "WHERE [TitoloDocumento] LIKE '%" & strTestoDaCercare & "%'"
mi restituisce tutti i records che contengono la stringa che cerco, non solo
le parole intere.
Se cerco "cursor" mi restituisce anche "cursore".
Come modifico la clausola SQL per cercare solo parole intere?
Grazie
Paolo

where titolodocumento='"&strdacercare&"'"

Penso che paolo si riferisce alla ricerca di una stringa all'interno di un
campo, quello che suggerisci tu mi pare che da come output solo i record che
contengono nel campo solo quella parola...
Quindi vi sarebbe bisogno di utilizzare %.
Un saluto...

...

bah, allora gli bastera' aggiungere uno spazio all'inizio e uno alla fine,
no?
cioe':
"WHERE [TitoloDocumento] LIKE '% " & strTestoDaCercare & " %'"
????
F.

Infatti....
ma esiste un problema se la stringa si trova all'inizio del record ?
non viene presa....
se lo metti alla fine vengono prese quelle che finiscono....
Al momento non mi viene nulla altro....
-- 
Fortunato Calabro'
INFORMATICA 2000 srl
http://www.virtualmarket.it

 Al momento non mi viene nulla altro....
prova con:
"WHERE [TitoloDocumento] LIKE '% " & strTestoDaCercare & " %' OR
"[TitoloDocumento] LIKE '%" & strTestoDaCercare & " %' OR [TitoloDocumento]
LIKE '% " & strTestoDaCercare & "%' "
cercare quindi quelle che hanno uno spazio davanti e dietro, quelle che
hanno uno spazio solo dietro e quelle che hanno uno spazio solo davanti
ciao
--
Kappa
kappa**nospam**@
webngo.net
www.webngo.net

Al momento non mi viene nulla altro....
e con access non esiste la possibilita' di concatenare uno spazio all'inizio
del campo?
tipo
"WHERE ' ' & titolodocumento like '% " & ecc.ecc.
con SQL7 ci sono un sacco di funzioni del genere che ti permettono di fare
un sacco di "giochini" per scavalcare problemi del genere...

Si potrebbe considerare il caso in cui hai al posto dello spazio un segno di
punteggiatura invece che spazio quindi nel SQL di microsoft si potrebbe
ancora inserire la clausola con le parentesi quadre.
ecco un esempio se cerco 'ignifugo' la sguente query funge e trova tutti i
record che contengono la parola intera ignifugo.
SELECT description
FROM vm_product
WHERE description LIKE '%[ ;.:]ignifugo[ ;.:]%' OR
    description LIKE 'ignifugo[ ;.:]%' OR
    description LIKE '%[ ;.:]ignifugo'
in modo da prenderli proprio tutti.
p.s.: con sql per sql server.
per ANSI non lo so se cambia qualcosa....


 un sacco di "giochini" per scavalcare problemi del genere...
ciao...
e quali sono, io non ne ho trovata nemmeno una....

...

ma di funzioni sql da poter usare con sqlserver ce ne sono un mare!
tipo replace() o cose di questo genere!
Non hai un manuale di sql7?
Io ne ho uno dell'apogeo, e c'e' l'elenco di tutte le funzioni di stringa,
di data ecc.ecc....
se hai bisogno di qualcosa in particolare, posso darti qualche
indicazione....
ciao!
F.

Si, neo tre o quattro tra i quali quello che dici tu, ma non penso che siano
di aiuto queste funzioni per il caso che abbiamo risolto.....che dici?
ciao.... e grazie...


di aiuto queste funzioni per il caso che abbiamo risolto.....che dici?
beh, no, per concaternare in sql7 si usa il simbolo "+".
io dicevo in generale, cosi', riflettendo....
ultimamente mi sono ritrovata ad usarle massicciamente per certi miei
problemucci di recupero dati.
Ad esempio, ho scoperto che nelle query si possono inserire di veri e propri
costrutti, del tipo
select (if campo1 vale 'ciccio' allora campo2 altrimenti campo1) from
nometabella
e questa cosa qui l'ho scoperta andando a sbirciare nelle VIEWS di sistema
di sql7!!
Non era scritta da nessuna parte nel mio manuale, che comunque e' ottimo!!
Hai mai provato?
Prova a guardare nella view "TABLES" di sql7 e guarda che meraviglia....
o almeno: per me e' stata una vera scoperta! :-O
ciao!
F.

Visto che siamo in vena di pregiatezze, quanto sopra è fattibile con una
'quiretta' del tipo (posto 'miastringa' la stringa da cercare in tab
'miatabella' e campo 'miocampo'):
select miocampo from miatabella where miocampo like '%'+(case when
charindex(miastringa,miocampo)=1 then '' else ' ' end)+miastringa+
       (case when
charindex(miastringa,miocampo)+len(miastringa)-1=len(miocampo) then '' else
' ' end)+'%'


:-)
finalmente un po' di sane elucubrazioni su i.c.w.a!! :-))
schezi a parte, a volte ci si trova davvero a dover scrivere cose del
genere!
a me ultimamente mi fanno delle richieste talmente strane (i clienti) che
sono costretta a fare salti mortali con triplo avvitamento.....
comuqnue parlavo proprio di quel "case when"...
imho, molto utile!
ciao a tutti!
F.

Perfetto. Ho preparato una lista di "separatori di parola" che possano
servire allo scopo, e magari la arricchirņ di nuovi, se necessario.
  StringToSearch=...   'parola da cercare.
  WordSep="[ ;.:()/\-]"
  strSQL ="SELECT * FROM [ElencoDocumenti] WHERE " & _
  "[Descrizione] LIKE '%" & WordSep & StringToSearch & WordSep & "%' OR " &
_
  "[Descrizione] LIKE '" & StringToSearch & WordSep & "%' OR " & _
  "[Descrizione] LIKE '%" & WordSep & StringToSearch & "'"
Purtroppo devo usare un semplice .MDB quindi tante finezze dei servers SQL
non le posso usare.
Se MS SQL server o MySQL hanno dei costrutti aggiuntivi per delle ricerche
testuali, io purtroppo devo arrangiarmi... comunque ho convinto l'utente a
non chiedere troppe cose strane.
Un'alternativa (che usa MySql per individuare le parole) sarebbe quella da
identificare come Parola una sequenza di caratteri A..Az.z e cifre e
considerare il resto come "separatore", ma non vorrei complicarmi la vita.
Un'altra alternativa, ma non mi sembra efficace in questo caso, poteva
essere l'uso di MATCH o REGEXP.
Grazie a tutti!
Paolo

Come modifico la clausola SQL per cercare solo parole intere?
"WHERE [TitoloDocumento] LIKE '% " & strTestoDaCercare & " %'"
Ovvero, uno LIKE '%SPAZIO" & strTestoDaCercare & "SPAZIO%'"
Saluti.
Luciano


magari metti un paio di spazi. I.e. :
"WHERE [TitoloDocumento] LIKE '% " & strTestoDaCercare & " %'"
questo pero' non ti salva da situazioni tipo:
cursor,
cursor:
e "piu" pessima di tutte se la parola e' seguita da CRLF
etc
-- 
Alessandro Cara

...e se scrivi:
"SELECT * FROM [ElencoDocumenti] " & _
"WHERE [TitoloDocumento] LIKE '% " & strTestoDaCercare & " %'"
cioč con gli spazi tra il carattere jolly e la stringa da ricercare?
Ciao,
    Filippo Di Blasi 
filippo...@puntoinformatico.it
    Webmaster(at) 
www.puntoinformatico.it


 nometabella
Proprio "if ... else ... end", oppure "case [...] when ... else ... end"?

 writes:
P> Un'altra alternativa, ma non mi sembra efficace in questo caso, poteva
P> essere l'uso di MATCH o REGEXP.
Oddio, le regular expressions  (regexp) sono nate _proprio_ per questo
tipo di  problemi. Access  le supporta (confesso di non averlo esplorato)?
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )

prova ad usare ' per la stringa da cercare e la funzione Trim per togliere
gli spazi iniziali (e credo finali)
SELECT * FROM [ElencoDocumenti]  WHERE Trim([TitoloDocumento]) =  '  Trim("
& strTestoDaCercare &  " )' "
-- 
Posted from [194.185.160.243] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG


la seconda che hai detto.
ovviamente la mia era una semplificazione per farne capire l'utilizzo!
F.

 ha scritto nel messaggio
news:uelv7j...@mail.eng.it...

VBscript (e forse Jscript) le supportano tramite l'oggetto RegExp, Match e
altri, in maniera un po' limitata rispetto all'originale in Perl. Access non
penso proprio, ma dicevo che non le ritenevo efficaci in quanto, per usarle,
avrei dovuto ottenere il recordset e poi, scorrermi ogni record tramite
queste, per filtrare le parole intere.
Avrei preferito invece poter ottenere il recordset già pulito, tramite SQL.
In Acc. non c'è, ma se ci fosse qualche buon'anima che si facesse qualche
funzione personalizzata, magari anche in una bella DLL, non sarebbe male!
Ciao!
Paolo

 writes:
P> VBscript (e forse Jscript) le supportano tramite l'oggetto RegExp, Match e
P> altri, in maniera un po' limitata rispetto all'originale in Perl. 
C'erano altri  che le  usavano prima di  Perl, la  Unix Administration
Swiss Chainsaw le ha solo incluse (ovvio!) :)
P> ... ottenere il recordset e poi, scorrermi ogni record tramite
P> queste, per filtrare le parole intere. 
Si, le prestazioni degradano.
P> Avrei preferito invece poter ottenere il recordset già pulito, tramite SQL.
SQL mi pare uno strumento fatto per un'altro approccio al reperimento dei 
dati, da quello che ne ho imparato.
Includere una funzione in SQL su Access tramite una DLL non so se si può.
Però access è programmabile in VBA anche se non ottieni un qualcosa che
funziona come una stored procedure puoi sempre provare a parlare alla
funzione vba via COM... Non so quali saranno le prestazioni...
Hmmm... A naso le query che ti  hanno proposto con i tre tipi di match
(inizio record, centro record e fine record) sono valide.
Se puoi abbandonare la soluzione DB sql ci sono motori di ricerca come
HTDig che hanno licenza GPL...



Grazie delle info.
Al tempo del C64, in assembler, riuscivo a fare cose più
veloci e stabili di quelle che ci propinano con le macchine attuali.
Il pe(a)rl l'ho visto da lontano.
Nelle query di Acc. si possono mettere funzioni personalizzate, interne o
reperite anche da una DLL esterna, ed incorporarle in una clausola SQL,
magari in una query.
Purtoppo temo che richiamandole da ADO le funzioni siano inutilizzabili.
Al riguardo, nel mio caso devo fare la ricerca in circa 38 tbl che l'utente
vuole che siano necessariamente in MDB, e quindi devo lasciare tutto così,
neanche modificare la struttura delle stesse. Se potevo usare altri tools,
l'avevo già fatto.
Se ho bisogno di info sul Perl ti contatto!
Ciao!
Paolo