2011-01-03 14 views
5

Lo siento, soy nuevo en el trabajo con bases de datos. Estoy tratando de realizar una consulta que obtendrá todos los caracteres que son similares a una cadena en SQL.Pregunta comodín SQL

Por ejemplo,

Si Busco a todos los usuarios que comienzan con una determinada cadena, algo así como S * o * Sm que volvería "Smith, maloliente, sonrisas, etc ..."

¿Estoy en el camino correcto con esto?

¡Cualquier ayuda sería apreciada, y gracias de antemano!

+0

Tenga en cuenta que las diferentes versiones de SQL le ofrecen diferentes opciones; pero todos admiten '%'. – egrunin

Respuesta

6

El operador LIKE es lo que está buscando, por lo que por su ejemplo que se necesita algo como:

SELECT * 
    FROM [Users] 
WHERE LastName LIKE 'S%' 

El carácter '%' es el comodín de SQL.

+0

Esto es lo que estaba buscando, ya que realmente necesitaba algo para encontrar nombres y otros campos que "comenzaron con" una cadena específica. Perdón por mi pobre redacción. –

3

para obtener todos los usuarios con un apellido de Smith

SELECT * 
    FROM [Users] 
WHERE LastName ='Smith' 

para obtener todos los usuarios donde el apellido contiene smith hacer esto, que también volverá blasmith, perez2, etc, etc

SELECT * 
    FROM [Users] 
WHERE LastName LIKE '%Smith%' 

Si usted quiere que todo lo que comienza con Smith lo haga

SELECT * 
    FROM [Users] 
WHERE LastName LIKE 'Smith%' 
0

Su pregunta no es e nítidamente claro.

Si desea que todos los usuarios con el apellido Smith, una búsqueda normal trabajarán:

SELECT * FROM users WHERE last_name = 'Smith' 

Si desea que todos los usuarios que comienzan con 'S' y termina en 'th', puede utilizar COMO y un comodín:

SELECT * FROM users WHERE last_name LIKE 'S%th' 

(Tenga en cuenta que el comodín estándar de SQL es '%' en lugar de '*').

Si realmente desea una coincidencia de "sonidos similares", muchas bases de datos admiten una o más búsquedas de algoritmos SOUNDEX. Consulte la documentación de su producto específico (que no menciona en la pregunta).

0

también pueden gustarle los resultados de SOUNDEX, dependiendo de su preferencia por la similitud del apellido.

select * 
from [users] 
where soundex('lastname') = soundex('Smith') 
or upper(lastname) like 'SM%' 
+0

Excepto que soundex no es muy bueno (p. Ej., Se ha observado algo así como una tasa de falsos positivos del 60%). Fue diseñado para coincidir nombres en inglés, no palabras arbitrarias. Se cae en su cara dado un texto arbitrario (o texto fuera de las 26 letras de la base del alfabeto). Aquí está la patente original de 1917. http://www.google.com/patents/about?id=EbdgAAAAEBAJ&dq=1,261,167 –

+0

de acuerdo, excepto los apellidos en inglés son exactamente lo que el OP está hablando ... – Randy

2

estándar (ANSI) SQL tiene dos caracteres comodín para su uso con la palabra clave como:

  • _ (subrayado). Coincide con una sola aparición de cualquier carácter individual.
  • % (signo de porcentaje). Coincide con cero o más apariciones de cualquier carácter individual.

Además, SQL Server extiende el comodín LIKE a juego para incluir la especificación de juego de caracteres, más bien como una normal de especificador de conjunto de caracteres regulares expresion:

  • [juego de caracteres] coincide con un solo carácter de el conjunto especificado
  • [^ juego de caracteres] Coincide con un solo carácter que no está en el conjunto especificado.

conjuntos de caracteres pueden ser especificados en la forma normal como un rango, así:

  • [0-9] coincide con cualquier dígito decimal.
  • [A-Z] coincide con cualquier letra mayúscula
  • [^ A-Z0-9-] coincide con cualquier carácter que no sea una letra, dígito o guión.

La semántica de la correspondencia de letras, por supuesto, depende de la secuencia de colación en uso. Puede o no ser sensible a mayúsculas y minúsculas.

Además, para que coincida con un corchete literal izquierdo ('[]'), usted debe usar el especificador de rango de caracteres. No obtendrá un error de sintaxis, pero tampoco obtendrá una coincidencia.

where x.field like 'x[[][0-9]]' 

coincidirá con el texto que se parece a 'x [0]', 'X [8]', etc. Pero

where 'abc[x' like 'abc[x' 

siempre habrá falsa.

4

Sql no puede hacer esto ... colocando el símbolo de porcentaje en el centro.

SELECT * FROM users WHERE last_name LIKE 'S%th' 

tendrías que escribir una cláusula where y una y una cláusula.

SELECT * FROM users WHERE last_name LIKE 'S%' and last_name LIKE '%th'