uso trabajados son not microsoft los ejemplos cuáles cuales comodines coincidencias clausula buscar sql sql-server wildcard in-function

trabajados - Servidor SQL que usa un comodín dentro de IN



not like sql server (13)

Como creo que esta debería ser una pregunta básica, sé que esta pregunta probablemente haya sido formulada, pero no puedo encontrarla. Probablemente esté a punto de ganar mi insignia de Presión de Pares, pero lo preguntaré de todos modos:

¿Hay alguna forma en SQL Server de la que no tengo conocimiento para usar el carácter comodín% cuando uso IN.

Me doy cuenta de que puedo usar OR como:

select * from jobdetails where job_no like ''0711%'' or job_no like ''0712%''

y en algunos casos puedo usar una subconsulta como:

select * from jobdetails where job_no in (select job_no from jobs where job_id = 39)

pero estoy buscando hacer algo como lo siguiente:

select * from jobdetails where job_no in (''0711%'', ''0712%'')

En este caso, utiliza el signo de porcentaje como un carácter en lugar de un carácter comodín, por lo que no se devuelven las filas. Actualmente solo uso un montón de quirófanos cuando tengo que hacer esto, pero sé que tiene que haber una mejor manera. ¿Qué método usas para esto?


  1. Primero agregué una tabla estática con TODAS las posibilidades de los resultados de mi comodín (esta empresa tiene un código nvarchar de 4 caracteres como sus localidades y comodín para sus locales), es decir, ¿pueden tener 456? que les daría 456 [1] a 456 [Z], es decir, 0-9 y az

  2. Tuve que escribir una secuencia de comandos para atraer al usuario actual (declararlos) y extraer las máscaras para el usuario declarado.

  3. Cree algunas tablas temporales solo básicas para clasificar los números de fila para este usuario actual

  4. recorrer cada resultado (TU O esto O ese, etc.)

  5. Insertar en la Tabla de prueba.

Aquí está el script que utilicé:

Drop Table #UserMasks Drop Table #TESTUserMasks Create Table #TESTUserMasks ( [User] [Int] NOT NULL, [Mask] [Nvarchar](10) NOT NULL) Create Table #UserMasks ( [RN] [Int] NOT NULL, [Mask] [Nvarchar](10) NOT NULL) DECLARE @User INT SET @User = 74054 Insert Into #UserMasks select ROW_NUMBER() OVER ( PARTITION BY ProntoUserID ORDER BY Id DESC) AS RN, REPLACE(mask,''?'','''') Mask from dbo.Access_Masks where prontouserid = @User DECLARE @TopFlag INT SET @TopFlag = 1 WHILE (@TopFlag <=(select COUNT(*) from #UserMasks)) BEGIN Insert Into #TestUserMasks select (@User),Code from dbo.MaskArrayLookupTable where code like (select Mask + ''%'' from #UserMasks Where RN = @TopFlag) SET @TopFlag = @TopFlag + 1 END GO select * from #TESTUserMasks


¿Qué tal algo como esto?

declare @search table ( searchString varchar(10) ) -- add whatever criteria you want... insert into @search select ''0711%'' union select ''0712%'' select j.* from jobdetails j join @search s on j.job_no like s.searchString


Como Jeremy Smith lo publicó, lo resumiré, ya que no pude responder a esa pregunta en particular suya.

select * from jobdetails where job_no like ''071[1-2]%''

Si solo necesita 0711% y 0712% , también puede colocar rangos entre corchetes. Para la palabra clave NOT , también puede usar [^1-2]%


Creo que tengo una solución a lo que el creador de esta consulta quería en forma simple. Funciona para mí y en realidad es la razón por la que vine aquí para empezar. Creo que solo usar paréntesis alrededor de la columna como ''% text%'' en combinación con OR lo hará.

select * from tableName where (sameColumnName like ''%findThis%'' or sameColumnName like ''%andThis%'' or sameColumnName like ''%thisToo%'' or sameColumnName like ''%andOneMore%'')


El operador IN no es más que una elegante comparación de ''=''. De hecho, es tan "nada más que" que en SQL 2000 hubo un error de desbordamiento de pila debido a la expansión de IN en OR s cuando la lista contenía aproximadamente 10k entradas (sí, hay personas escribiendo entradas 10k IN ...). Entonces no puedes usar ningún comodín coincidente.


En Access SQL, usaría esto. Me imagino que SQLserver tiene la misma sintaxis.

seleccione * from jobdetails donde job_no como "0711 *" o job_no como "0712 *"


Esta podría ser la solución más simple de usar like any

select * from jobdetails where job_no like any (''0711%'', ''0712%'')

En Teradata, esto funciona bien.


Podrías probar algo como esto:

select * from jobdetails where job_no like ''071[12]%''

No es exactamente lo que estás preguntando, pero tiene el mismo efecto, y también es flexible en otros aspectos :)


Prueba esto

select * from jobdetails where job_no between ''0711'' and ''0713''

el único problema es que el job ''0713'' se devolverá, así que puede usar ''07299999999999'' o simplemente agregar and job_no <> ''0713''

Dan zamir


Qué tal si:

WHERE LEFT(job_no, 4) IN (''0711'', ''0712'', ...)


Tenía un objetivo similar, y llegué a esta solución:

select * from jobdetails as JD where not exists ( select code from table_of_codes as TC where JD.job_no like TC.code )

Supongo que sus diversos códigos (''0711%'', ''0712%'', etc.), incluido el%, están almacenados en una tabla, a la que estoy llamando * table_of_codes *, con código de campo.

Si el% no está almacenado en la tabla de códigos, simplemente concatene el ''%''. Por ejemplo:

select * from jobdetails as JD where not exists ( select code from table_of_codes as TC where JD.job_no like concat(TC.code, ''%'') )

La función concat () puede variar según la base de datos en particular, hasta donde yo sé.

Espero que ayude. Lo adapté de:

http://us.generation-nt.com/answer/subquery-wildcards-help-199505721.html


Usted tiene la respuesta allí en su pregunta. No se puede pasar directamente al comodín cuando se utiliza IN. Sin embargo, puede usar una subconsulta.

Prueba esto:

select * from jobdetails where job_no in ( select job_no from jobdetails where job_no like ''0711%'' or job_no like ''0712%'') )

Sé que esto parece una locura, ya que puedes simplemente usar O en tu cláusula WHERE. ¿por qué la subconsulta? Sin embargo, el enfoque de subconsulta será útil cuando tenga que hacer coincidir detalles de una fuente diferente.

Raj


SELECT c.* FROM( SELECT ''071235'' AS token UNION ALL SELECT ''07113'' UNION ALL SELECT ''071343'' UNION ALL SELECT ''0713SA'' UNION ALL SELECT ''071443'') AS c JOIN ( SELECT ''0712%'' AS pattern UNION ALL SELECT ''0711%'' UNION ALL SELECT ''071343'') AS d ON c.token LIKE d.pattern 071235 07113 071343