我们有一个数据库表,用户具有first_name
,last_name
列,但没有full_name
列。我们要在表上执行搜索,搜索查询中可以包含字符串,该字符串是两列或其中之一的组合,或者只是一个字符。搜索必须不区分大小写。
编辑1 搜索需要足够快,因为请求来自Web客户端上的预先输入。
答案 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:
Restult1:
Restult2:
希望这会有所帮助。