Как найти полное имя в таблице базы данных сервера sql только с именем и фамилией столбца? - PullRequest
0 голосов
/ 20 мая 2019

У нас есть таблица БД, пользовательская со столбцами first_name, last_name, но у нас нет столбца full_name. Мы хотим выполнить поиск по таблице, где поисковый запрос может содержать строку, которая является комбинацией обоих столбцов или одного из них или просто символа. Поиск не зависит от регистра.

Редактировать 1 Поиск должен быть достаточно быстрым, так как запрос был бы от типа на веб-клиенте.

Ответы [ 4 ]

1 голос
/ 20 мая 2019

В выражениях LIKE по умолчанию регистр не учитывается. Как предложил @larnu, добавление постоянного столбца - лучший способ сделать это. И если вы сможете выполнить поиск по префиксу, это еще больше ускорит процесс. Если это не вариант, попробуйте это, чтобы увидеть, если вы можете терпеть производительность:

SELECT CONCAT_WS (" ", first_name, last_name) full_name
FROM YourTable
WHERE CONCAT_WS (" ", first_name, last_name) LIKE '%some string%';
0 голосов
/ 20 мая 2019

Вы можете использовать этот запрос:

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%'

Например, я создаю таблицу, подобную вам, и запускаю этот запрос, чтобы получить желаемый результат.

ТВ3:

enter image description here

Restult1:

enter image description here

Restult2:

enter image description here

Надеюсь, это поможет.

0 голосов
/ 20 мая 2019

Если вы видите, что формат вашего поискового запроса совпадает с комбинацией 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
0 голосов
/ 20 мая 2019

С таблицей БД и примером было бы легче работать, но простой случай должен быть примерно таким, как запрос ниже. Я бы позаботился, чтобы строка поиска была преобразована в нижний регистр.Обратите внимание, что такой запрос в крупномасштабной базе данных может быть не таким быстрым

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