2015-01-14 10 views
0

Я пытаюсь понять, как объединить несколько имен, таких как имена и девичьи имена (включая возможные префиксы), как полное имя без двойного интервала, используя тире только тогда, когда необходимо (при наличии двух имен).SQL concat несколько имен и добавить тире в случае двух имен

Например:

  • когда человек имеет и фамилию и фамилию, я хочу, чтобы выглядеть, как 'A. van Dijk - Turner' (обратите внимание на дефис, «ван де» являются префиксы)
  • Когда у человека есть только последнее или девичье имя, я хочу, чтобы он выглядел как 'A van Dijk'.

В следующем примере кода, безусловно, не является достаточным:

concat (initals, ' ',prefixlastname,' ', lastname, ' - ', prefixmaidenname ', maidenname) AS 'full name' 

Если человек имеет только имя Maiden, код, указанный выше результатов, например, «A-van Dijk».

Какое наиболее эффективное решение? Заранее большое спасибо.

+0

Какую базу данных вы используете? –

+0

Я использую SQL-сервер 12.0.2 – ralph

ответ

2

Попробуйте что-то вроде COALESCE(initals || ' ',''), то есть если инициалы не являются нулевыми инициалами плюс пробел возвращается. Если инициалы имеют значение NULL, возвращается пустая строка.

+0

Спасибо, но синтаксис не принят (неправильный синтаксис?). Когда я меняю его на одиночный канал, он тоже не работает (типы данных nvarchar и varchar несовместимы в операторе '|'). – ralph

+0

Возможно, это синтаксис ANSI SQL. Я до сих пор не заметил тег SQL Server, поэтому я написал более или менее независимый от dbms ответ. Может быть, coalesce (concat (инициалы, ''), '') работает с SQL Server? – jarlh

+0

Работает, спасибо :). – ralph

0

Использование следующим образом:

SELECT REVERSE(SUBSTRING(REVERSE(ISNULL(FirstName + '-','') + ISNULL(LastName + '-','')),2,8000)) 

Или еще проще вариант:

SELECT REVERSE(SUBSTRING(REVERSE(CONCAT(FirstName +'-', LastName + '-')),2,8000)) 

и любые другие столбцы, которые вы хотите

+0

Я продолжаю получать тире, где я не хочу ее видеть. Только в случае двух имен они должны быть разделены тире. – ralph

+0

С вышеуказанным запросом вы не должны видеть эту досадную тире! :) –