Sql 查询以查找用户

Sql 查询以查找用户,sql,tsql,Sql,Tsql,我需要编写一个查询来获取用户列表,其中他们的全名位于名为description的属性中。用户名以以下任何格式保存在该属性中:- 姓 lastname firstname(不带空格) 姓 在这种情况下,如果我需要在该属性中搜索给定的用户列表(大约100个),我必须编写如下查询 select*from dm_user where UPPER(“description”)如“%FIRSTUSER_FIRSTNAME%”或“description”)如“%SECONDUSER_FIRSTNAME%”

我需要编写一个查询来获取用户列表,其中他们的全名位于名为description的属性中。用户名以以下任何格式保存在该属性中:-

  • lastname firstname(不带空格)
在这种情况下,如果我需要在该属性中搜索给定的用户列表(大约100个),我必须编写如下查询
select*from dm_user where UPPER(“description”)如“%FIRSTUSER_FIRSTNAME%”或“description”)如“%SECONDUSER_FIRSTNAME%”

这是我做事情更简单的一种方式。我讨厌像*100次那样写
*上面的(“描述”)。(请建议使用标准sql查询)。
我需要在Documentum和MSSQL上运行此查询

我只想吃点像这样的东西

{


但是它在documentum中不可用}

您可能可以对MSSQL使用FreeText搜索,但我不知道如何处理名称


如果您一直试图避免使用UPPER()语法,则可以声明变量(取决于您的DBMS)


如果您想避免多次像
那样编写
,并且您正在使用MSSQL,请查看

一般的想法是将所有搜索词(firstname-lastname组合)放在一个temp table/table变量中,然后执行一个查询,检查
dm_user.description
是否至少包含一个搜索词

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

可以使用动态查询并让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%'

很抱歉,我没有创建任何东西的特权,它只是DQL,它是动态sql。这里有一篇文章用例子描述了可能的重复
--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%'