2012-02-04 78 views
1

我需要编写查询以获取用户列表,其全名用于名为的描述。用户名保存在该属性在任何格式: -查询以查找用户

  • 姓氏名字
  • LASTNAMEFirstname(无空格)
  • 名姓

在这种情况下,如果我需要寻找一个在给定的用户列表(约100)在该属性中,我必须编写查询,如 select * from dm_user where UPPER("description") like '%FIRSTUSER_FIRSTNAME%' OR UPPER("description") like '%SECONDUSER_FIRSTNAME%'依此类推。

是他们的一种方式,我可以做t更加简单。我讨厌写*UPPER("description") like* 100次。(请建议标准的sql查询)。 我需要在Documentum和MSSQL上运行此查询。

我只是想有像

{

select * from dm_user 
where UPPER("description") 
like IN ('%FIRSTUSER_FIRSTNAME%','%SECONDUSER_FIRSTNAME%'); 

但其在Documentum的不适}

+1

可能重复http://stackoverflow.com/questions/4855754/how-to-use-like-condition-with-multiple-values-in-sql-server -2005 – marapet 2012-02-04 13:32:55

回答

1

可以使用使用动态查询并让SQL Server将这些字符串写入100次吗?

--DROP TABLE #User 
-- This is an EXAMPLE: keep using your names source 
CREATE TABLE #User(Id int, Name varchar(50)) 
INSERT INTO #User VALUES (1, 'First') 
INSERT INTO #User VALUES (2, 'Second') 
-- ... and so on 

DECLARE @Query nvarchar(max) 
SELECT @Query = 'SELECT * FROM DM_USER WHERE 1=0' + 
     (
      SELECT ' 
OR Description LIKE ' + QUOTENAME('%' + Name + '%', '''') 
      FROM #User 
      FOR XML PATH (''), TYPE 
     ).value('.', 'nvarchar(max)') 

PRINT '@Query = ' + ISNULL(@Query, 'NULL') 
EXEC sp_executesql @Query 

结果:

@Query = SELECT * FROM DM_USER WHERE 1=0 
OR Description LIKE '%First%' 
OR Description LIKE '%Second%' 
0

如果你只是想(取决于您的DBMS)

declare @description varchar(max) 
set @description= UPPER('description'); 

select 
    * 
from 
    dm_user 
where 
    @description like '%FIRSTUSER_FIRSTNAME%' 
    OR @description like '%SECONDUSER_FIRSTNAME%' 
+0

否我想避免多次写LIKE – perilbrain 2012-02-04 10:53:01

1

避免使用上()语法你可以声明变量的时候如果你想避免编写LIKE很多时候,你正在使用MSSQL,看看temporary tablestable variables

一般的想法是将所有搜索项(名字 - 姓氏组合)放在临时表/表变量中,然后执行一个查询,检查dm_user.description是否包含至少一个搜索项。

SELECT DISTINCT u.id 
FROM dm_users AS u, #tmp as t 
WHERE dm_users.description LIKE N'%' + t.searchterm + '%' 
+0

我很抱歉,但我没有特权创建任何它只是DQL – perilbrain 2012-02-04 11:27:16

+0

这一切都是动态SQL。这里有一篇文章用示例来描述http://sergeb.com/blog/post/Dynamic-multi-value-SQL-LIKE.aspx – marapet 2012-02-04 13:37:49