2013-10-09 67 views
1

我想對第一個,中間和最後一個名字進行組合搜索。查詢是:名,中間名和姓氏MS SQL

SELECT picture,person_id, firstname+ ' ' +middlename+ ' ' +lastname AS fullName 
FROM PERSON 
WHERE (firstname+ ' ' +middlename+ ' ' +lastname LIKE"%#queryString#%") 

現在,這是工作:彼得書房測試(第一/中間/最後一個) 這不是工作:馬克·貝克(第一/無中間名/最後一個)。在Marc Baker出現之前,我必須輸入兩個空格。我可以檢查查詢中的中間名是否爲空?

謝謝!

+1

也許' ISNULL(middlename,'')'? – Magnus

回答

0

嘗試這樣的:

SELECT picture,person_id, firstname+ ' ' +middlename+ ' ' +lastname AS fullName 
FROM PERSON 
WHERE (firstname+ ' ' + LTRIM(middlename + ' ') + lastname LIKE"%#queryString#%") 
+0

這可以在沒有中間名時起作用,但當中間名存在時可以消除中間名和姓氏之間的空間。 –

+0

@NenadZivkovic它不會因爲它是一個'LTRIM'而不是'TRIM'。 –

+0

這是正確的,我更正了答案 – Pascalz

1

,我認爲這會工作:

WHERE (firstname+ ' ' +LTRIM(middlename+ ' ' +lastname) LIKE"%#queryString#%") 
+0

我喜歡這個想法。只需用'LTRIM'替換'TRIM'即可。 TRIM函數在SQL Server中不存在。 –

+0

@NenadZivkovic注意到......謝謝。 –

1

是的,你可以使用CASE做檢查,是這樣的:

SELECT picture,person_id, firstname+ ' ' +middlename+ ' ' +lastname AS fullName 
FROM PERSON 
WHERE (firstname 
      + CASE WHEN middlename = '' OR middlename IS NULL THEN '' ELSE ' ' +middlename END 
      + ' ' +lastname LIKE"%#queryString#%")