in

servidor sql – ¿Existe una combinación de «LIKE» e «IN» en SQL?

apple touch icon@2

Para Sql Server puede recurrir a SQL dinámico.

La mayoría de las veces, en tales situaciones, el parámetro de la cláusula IN se basa en algunos datos de la base de datos.

El siguiente ejemplo es un poco «forzado», pero puede coincidir con varios casos reales encontrados en bases de datos heredadas.

Suponga que tiene mesa Personas donde los nombres de las personas se almacenan en un solo campo PersonName como Nombre + » + Apellido. Debe seleccionar a todas las personas de una lista de nombres, almacenados en el campo NameToSelect en mesa Nombres para seleccionar, además de algunos criterios adicionales (como filtrado por género, fecha de nacimiento, etc.)

Puedes hacerlo de la siguiente manera

-- @gender is nchar(1), @birthDate is date 

declare 
  @sql nvarchar(MAX),
  @subWhere nvarchar(MAX)
  @params nvarchar(MAX)

-- prepare the where sub-clause to cover LIKE IN (...)
-- it will actually generate where clause PersonName Like 'param1%' or PersonName Like 'param2%' or ...   
set @subWhere = STUFF(
  (
    SELECT ' OR PersonName like ''' + [NameToSelect] + '%''' 
        FROM [NamesToSelect] t FOR XML PATH('')
  ), 1, 4, '')

-- create the dynamic SQL
set @sql="select 
      PersonName
      ,Gender
      ,BirstDate    -- and other field here         
  from [Persons]
  where 
    Gender = @gender
    AND BirthDate = @birthDate
    AND (" + @subWhere + ')'

set @params=" @gender nchar(1),
  @birthDate Date"     

EXECUTE sp_executesql @sql, @params,    
  @gender,  
  @birthDate

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Función de biblioteca C – sqrt ()

gfg 200x200 min

Programa Python para Bubble Sort