如何在只有名字和姓氏列的SQL Server数据库表中搜索全名?

时间:2019-05-20 06:49:00

标签: sql sql-server database azure-sql-database

我们有一个数据库表,用户具有first_namelast_name列,但没有full_name列。我们要在表上执行搜索,搜索查询中可以包含字符串,该字符串是两列或其中之一的组合,或者只是一个字符。搜索必须不区分大小写。

编辑1 搜索需要足够快,因为请求来自Web客户端上的预先输入。

4 个答案:

答案 0 :(得分:1)

默认情况下,LIKE表达式不区分大小写。正如@larnu所建议的那样,添加一个持久性列是解决该问题的更好方法。而且,如果您可以对此进行前缀搜索,则可以进一步加快速度。如果这些都不可行,请尝试以下操作以查看性能是否可以承受:

SELECT CONCAT_WS (" ", first_name, last_name) full_name
FROM YourTable
WHERE CONCAT_WS (" ", first_name, last_name) LIKE '%some string%';

答案 1 :(得分:0)

数据库表和示例将更易于使用,但简单的情况应类似于以下查询 我将确保将搜索字符串转换为小写。 注意,在大型数据库上进行这样的查询可能不会那么快

SELECT
*
FROM
users u
WHERE
 LOWER(CONCAT(u.first_name,u.last_name)) LIKE '%{@search_string_here}%'

答案 2 :(得分:0)

如果您使用firstname[space]lastname组合查找相同的搜索词格式,则可以执行以下操作:

SELECT *
FROM Names
WHERE LEFT([Firstname] + ' ' + [lastname], LEN(@searchname)) = @searchname

这将允许您按搜索名称的长度进行搜索。下面是一个如何工作的示例:

CREATE TABLE Names
(
    firstname NVARCHAR(100),
    lastname NVARCHAR(100)
)

INSERT INTO Names VALUES
('John', 'Smith'), ('Jane', 'Doe'), ('Harry', 'Potter')


DECLARE @searchname NVARCHAR(100)

--John (Fist Name match only)
SET @searchname = 'John'
SELECT *
FROM Names
WHERE LEFT([Firstname] + ' ' + [lastname], LEN(@searchname)) = @searchname

--Jane D (First name + Initial Last name)
SET @searchname = 'Jane D'
SELECT *
FROM Names
WHERE LEFT([Firstname] + ' ' + [lastname], LEN(@searchname)) = @searchname


--H (Single character only in correct order)
SET @searchname = 'H'
SELECT *
FROM Names
WHERE LEFT([Firstname] + ' ' + [lastname], LEN(@searchname)) = @searchname

答案 3 :(得分:0)

您可以使用以下查询:

SELECT first_name,last_name,  CONCAT(CONCAT(first_name,' '),last_name)  full_name  
FROM User_table WHERE CONCAT(CONCAT(first_name,' '),last_name) LIKE '%string%'

或者:

SELECT first_name,last_name,  CONCAT(first_name,last_name)  full_name  
FROM User_table WHERE CONCAT(fistName,lastName) LIKE '%string%'

例如,我创建了一个像您一样的表,然后运行此查询以获取所需的结果。

TB3:

enter image description here

Restult1:

enter image description here

Restult2:

enter image description here

希望这会有所帮助。