Discussione:
select e caratteri jolly
(troppo vecchio per rispondere)
ringo
2004-12-09 15:43:41 UTC
Permalink
Salve a tutti,

devo fare una ricerca su una colonna di tivo nvarchar(9):

esempio:

valore = 054604876

in una select se faccio:

select .... where campo like '54604876' non mi trova il record
select .... where campo like '%54604876' mi trova il record
select .... where campo like '%4604876' non mi trova il record
select .... where campo like '%%604876' mi trova il record

in access facevo:

select ....where campo like '*numero' e mi beccava sempre il record

esiste in sql server un modo simile?

grazie!

ringo
Andrea Benedetti
2004-12-09 16:11:06 UTC
Permalink
Salve ringo,
Post by ringo
Salve a tutti,
valore = 054604876
select .... where campo like '54604876' non mi trova il record
select .... where campo like '%54604876' mi trova il record
select .... where campo like '%4604876' non mi trova il record
select .... where campo like '%%604876' mi trova il record
select ....where campo like '*numero' e mi beccava sempre il record
esiste in sql server un modo simile?
In sql server il carattere jolly è il percento '%'
Quindi cambierei i tuoi risultati con:

select * from tabella where campo like '54604876' --non mi trova il
record
-- corretto perchè non ne esiste uno uguale

select * from tabella where campo like '%54604876' -- mi trova il record
-- corretto il caretteri jolly sostituisce lo zero inziale

select * from tabella where campo like '%4604876' -- lo trova, lo trova
-- corretto il caretteri jolly sostituisce lo zero inziale ed il cinque

select * from tabella where campo like '%%604876' -- mi trova il record
-- corretto il caretteri jolly sostituisce lo zero inziale, il cinque ed il
quattro
Post by ringo
grazie!
ringo
Prego!
Andrea
Lorenzo Benaglia
2004-12-09 16:19:53 UTC
Permalink
Post by ringo
select .... where campo like '54604876' non mi trova il record
select .... where campo like '%54604876' mi trova il record
select .... where campo like '%4604876' non mi trova il record
Vediamo:

USE tempdb
GO

CREATE TABLE dbo.Test(
Campo nvarchar(9) NOT NULL
)
GO

INSERT dbo.Test VALUES(N'054604876')
GO

/* Query 1 - Non restituisce ovviamente alcune riga */
SELECT * FROM dbo.Test WHERE Campo LIKE N'54604876'
GO

/* Output:

Campo
---------

(0 row(s) affected)

*/

/* Query 2 - Restituisce la riga */
SELECT * FROM dbo.Test WHERE Campo LIKE N'%54604876'
GO

/* Output:

Campo
---------
054604876

(1 row(s) affected)

*/

/* Query 3 - Restituisce la riga */
SELECT * FROM dbo.Test WHERE Campo LIKE N'%4604876'
GO

/* Output:

Campo
---------
054604876

(1 row(s) affected)

*/

/* Pulizia */
DROP TABLE dbo.Test

Come vedi il terzo esempio restituisce la riga desiderata.
Post by ringo
select .... where campo like '%%604876' mi trova il record
Questo esempio non ha senso, in quanto % è una wildcard che rappresenta 0 o
più caratteri.
Post by ringo
select ....where campo like '*numero' e mi beccava sempre il record
In SQL Server è la stessa cosa, sostituendo "*" con "%".
Occhio che mettere una wildcard come primo carattere da cercare, non rende
la condizione un search argument e di conseguenza non verranno utilizzati
eventuali indici definiti su tale colonna.

Per maggiori info leggi il seguente articolo di Kalen Delaney:
http://www.windowsitpro.com/SQLServer/Articles/ArticleID/21038/pg/1/1.html
Post by ringo
grazie!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org
ciccio
2004-12-09 16:33:03 UTC
Permalink
[cut]

il carattere jolly % sostituisce un gruppo di caratteri, quindi

select * from tabella where campo

like '%123456' -- troverà tutti i record dove 'campo' terminerà con la
stringa '123456' (termina con)

like '123456%' -- troverà tutti i record dove 'campo' inizia con la
stringa '123456' (inizia con)

like '%123456%' -- troverà tutti i record dove 'campo' contiene la
stringa '123456' (contiene)

ciao
Ciccio
ciccio
2004-12-09 16:37:07 UTC
Permalink
Dimenticavo che per sostituire un solo carattere puoi utilizzare il
carattere jolly '_'

ciao
Ciccio

Continua a leggere su narkive:
Loading...