我把您的查詢,修改一點點:
SELECT
---this is the tricky part: inner part finds the first instance of '(' parenthesis
--and substract it from the length of the first name and get only the left part of the first name by subtracting it
CONCAT (
LEFT(t.FirstName, LEN(t.FirstName) - (LEN(t.FirstName) - CHARINDEX('(', t.FirstName) + 1))
,t.LastName
)
FROM (
--basically separating your above syntax to two columns
SELECT RIGHT('Smith, Mr. William (Bill)', LEN('Smith, Mr. William (Bill)') - CHARINDEX('.', 'Smith, Mr. William (Bill)') - 1) AS FirstName
,LEFT('Smith, Mr. William (Bill)', CHARINDEX(', ', 'Smith, Mr. William (Bill)') - 1) AS LastName
) t
這裏是應該與表名和列運行查詢:
SELECT
---Use case when statement to determine if there are any instances of '(' in the first name
CONCAT (
CASE
WHEN CHARINDEX('(', t.FirstName) > 0
THEN LEFT(t.FirstName, LEN(t.FirstName) - (LEN(t.FirstName) - CHARINDEX('(', t.FirstName) + 1))
ELSE t.FirstName + ' '
END
,t.LastName
)
FROM (
SELECT
RIGHT(u.manager, LEN(u.manager) - CHARINDEX('.', u.manager) - 1) AS FirstName
,LEFT(u.manager, CHARINDEX(', ', u.manager) - 1) AS LastName from Users u
) t
如果有像Jr.,Sr.,Dr.等前綴那麼這將不起作用。 – FutbolFan
@Nepali - 我同意他需要添加更多的替換,如果數據庫包含其他前綴(請參閱第2段)。由於沒有關於他的數據中有什麼前綴的信息,並且這是一次性操作,所以我寫了最常見的兩個,假設海報可以根據需要添加其他前綴。 – APH
@NepaliRookie我把它寫成「替換」而不是在第一個時期搜索字符串,因爲一些縮寫比前綴更常見的後綴(比如Jr,Sr,PhD),並且因爲有可能數據庫中的某些條目包含標題而沒有他們的一段時間,如小姐。 – APH