2014-02-25 3 views
-2

Как бы я хотел разделить один столбец с первым, последним и средним именем. Там есть отдельные столбцы в запросе SQL Server 2008?SQL: разделение первого, последнего и среднего имени на собственные столбцы?

Колонка называется NAME

NAME(char(25),null) 

Mctasrren ,David Max 
Cressler ,Patti L 
Basil ,Vessen Eddie 
Chapplestait ,Victoy 

это то, что я использовал до сих пор моя основная проблема является отчеством. или если у кого-то есть лучший способ сократить код имени.

--last кодовое имя

left([NAME],charindex(' ,',[NAME])) 

-first кодовое имя

substring([NAME],charindex(',',[NAME])+1,charindex(' ',substring([NAME],charindex(',',[NAME])+1,25-charindex(',',[NAME])+1))) 
+0

Итак, вы хотите, чтобы кто-то дал вам ответ без каких-либо усилий с вашей стороны. Это не то, о чем СО. –

+0

На самом деле рик я пытался. – user2974995

+0

nicky Я получил последнюю фамилию, используя левый ([PA-PT-NAME], charindex (',', [NAME])) это второе имя, которое действительно дает мне проблемы – user2974995

ответ

2

Вы хотите разбить его на столбцы как часть результирующего набора, создавать вычисляемые столбцы на столе, или действительно обновить схему, чтобы данные разделились в источнике?

В любом случае основные гайки и болты можно сделать либо:

  1. Используйте комбинацию CHARINDEX, SUBSTRING и влево или вправо, чтобы найти запятые или пробелы и разделить вокруг этого. Если вы уверены, что данные всегда будут «L_NAME, F_NAME M_NAME_OR_INITIAL», это будет очень легко. Я действительно удивлен, что не нашел аналогичного вопроса здесь, в верхней части поиска Google, но есть пример подобного из SQLServerCentral.

  2. Используйте RegEx через CLR, который может быть более надежным, если в данных есть какое-либо разнообразие. Если вы знакомы с RegEx, это должен быть прямой анализ. Опять же, упрощенный пример можно найти на MSDN.

Независимо от того, что вы выберете, вы, вероятно, быстро столкнетесь с именами, которые нелегко последуют этому формату. В этом случае вы хотите построить больше логики в дескрипторе функции для разных типов имен.

+1

+1 за хорошее объяснение и НЕ просто передал ему ответ. Который я знаю, что кто-то в конце концов это сделает. Задавать вопрос о SO должен быть вашим последним вариантом после того, как все остальное не получилось. –