Master Data Services Team Blog - Site Home - MSDN Blogs:
'via Blog this'
domingo, 21 de abril de 2013
sábado, 30 de marzo de 2013
Pattern Matching in Search Conditions
Pattern Matching in Search Conditions
Normalmente usamos LIKE con el símbolo % para indicar que nuestra búsqueda deberá coincidir hasta cierto punto.
El siguiente ejemplo
SELECT [EmployeeID] ,[LastName] ,[FirstName] ,[MiddleInitial] ,[SSN] FROM [Employee] WHERE LastName LIKE 'Ste%'
Retornará
EmployeeID LastName FirstName MiddleInitial SSN----------- ------------------------------ ----------------------------- ------------- -----------1 Stein Nidprxmvtyjnat 123-07-995114 Stein Qfgakkjblwfbkb 763-07-943127 Stein Ysscitlqms 590-07-891140 Stein Txhqy 437-07-8391
Pero el signo % no es el único que podemos usar. SQL server incluye los siguientes comodines.
Wildcard
|
Comportamiento
|
|---|---|
%
|
Cualquier string de cero o más caracteres.
|
_
|
Un caracter solamente.
|
[ ]
|
Un rango.
|
[^]
|
Un caracter que no este dentro del rango
|
En la siguiente condición SSN deberá no iniciarse con "1", en la siguiente posición deberá existir un número comprendido entre 0 y 9, la tercera posición deberá ser un número comprendido entre 4 y 8, en las siguientes 4 posiciones podrá ser cualquier cosa, pero a continuación deberá ser solamente un "9", el resto no nos interesa.
SELECT [EmployeeID] ,[LastName] ,[FirstName] ,[MiddleInitial] ,[SSN] FROM [Employee] WHERE SSN LIKE '[^1][0-9][4-8]____9%'
Este será el resultado
EmployeeID LastName FirstName MiddleInitial SSN----------- ------------------------------ ----------------------------- ------------- -----------2 Eflin Ysgphbplbhoksy 327-07-99117 Makai Lnudwgnbtoyvix 467-07-971124 Infante Raluqhoqtkd 967-07-9031251 Stein Nidprxmvtyjnat 247-06-9951255 Olphant Tqbigir 857-06-9791Comparison Operators Modified by ANY, SOME, or ALL
Comparison Operators Modified by ANY, SOME, or ALL
El operador IN nos permite saber si un valor se encuentra en un conjunto de valores. Normalmente lo usamos en el WHERE.
Por ejemplo
SELECT [EmployeeID] ,[LastName] ,[FirstName] ,[MiddleInitial] ,[SSN] FROM [Employee] WHERE LastName IN ('Stein','Chen')
Nos retorna
EmployeeID LastName FirstName MiddleInitial SSN----------- ------------------------------ ----------------------------- ------------- -----------1 Stein Nidprxmvtyjnat 123-07-99514 Chen Mju 750-07-983114 Stein Qfgakkjblwfbkb 763-07-943117 Chen Jdjoemmumy 733-07-931127 Stein Ysscitlqms 590-07-891130 Chen Eyeqkrvwoewil 327-07-8791
Los otro operadores de conjuntos que provee SQL son ALL, SOME y ANY
ANY retorna verdadero si la comparación se cumple para alguno del conjunto. Es lo mismo que IN.
SELECT [EmployeeID] ,[LastName] ,[FirstName] ,[MiddleInitial] ,[SSN] FROM [Employee] WHERE LastName = ANY (SELECT 'Stein'UNIONSELECT 'Chen')
ALL retorna verdadero si la condición se cumple para todo el conjunto
En el siguiente ejemplo ALL retornará los menores a 4, ya que los mismos son menores a 4 y a 8
SELECT [EmployeeID] ,[LastName] ,[FirstName] ,[MiddleInitial] ,[SSN] FROM [Employee] WHERE EmployeeID <= ALL ( SELECT 8UNIONSELECT 4) EmployeeID LastName FirstName MiddleInitial SSN----------- ------------------------------ ----------------------------- ------------- -----------1 Stein Nidprxmvtyjnat 123-07-99512 Eflin Ysgphbplbhoksy 327-07-99113 Quint Ysoawvtycuwv 593-07-98714 Chen Mju 750-07-9831(4 row(s) affected)User with last access
User with last access
select name, updatedate , accdate, case when sysadmin = 1 then 'sa' else '' end as rol , lastProcessfrom syslogins lleft join (select loginame, max(last_batch) lastProcess from master..sysprocesses group by loginame) a on a.loginame = l.nameorder by lastprocess desc, accdate desc
Suscribirse a:
Entradas (Atom)