Вам уже сказали, что ваша настоящая проблема - это проблема структуры данных. Поэтому я не буду говорить об этом снова. Если вы можете изменить это (возможно, эта проблема - попытка изменить это), вам действительно следует ...
Ну, я бы пошел по этому пути (в v2008, который устарел *)1004 * ...)
Ваши данные в сценарии макета :
DECLARE @mockupTable TABLE(ID INT,AppointmentTime DATETIME,Appointment VARCHAR(1000),ClientID INT);
INSERT INTO @mockupTable VALUES
(23,'2019-09-30T09:15:00.000','Project meeting :Taylor, James ', NULL)
,(34,'2019-09-30T09:20:00.000','Project meeting :Taylor, James ', NULL)
,(35,'2019-09-30T09:25:00.000','Project meeting :Taylor, James ', NULL)
,(36,'2019-09-30T10:25:00.000','Pre sales : Hayes, John ', 2)
,(47,'2019-09-30T10:30:00.000','Project meeting :Manning, Richard ',425)
,(50,'2019-09-30T14:30:00.000','Closure meeting :Kuruvita, Peter ', NULL);
- это запрос
SELECT t.*
,LTRIM(RTRIM(CastedAndSplit.value('/x[2]/y[1]/text()[1]','nvarchar(100)'))) AS LastName
,LTRIM(RTRIM(CastedAndSplit.value('/x[2]/y[2]/text()[1]','nvarchar(100)'))) AS FirstName
FROM @mockupTable t
CROSS APPLY(SELECT CAST('<x><y>' + REPLACE(REPLACE((SELECT t.Appointment AS [*] FOR XML PATH('')),',','</y><y>'),':','</y></x><x><y>') + '</y></x>' AS XML)) A(CastedAndSplit);
Результат
+----+-------------------------+-----------------------------------+----------+-----------+----------+
| ID | AppointmentTime | Appointment | ClientID | FirstName | LastName |
+----+-------------------------+-----------------------------------+----------+-----------+----------+
| 23 | 2019-09-30 09:15:00.000 | Project meeting :Taylor, James | NULL | Taylor | James |
+----+-------------------------+-----------------------------------+----------+-----------+----------+
| 34 | 2019-09-30 09:20:00.000 | Project meeting :Taylor, James | NULL | Taylor | James |
+----+-------------------------+-----------------------------------+----------+-----------+----------+
| 35 | 2019-09-30 09:25:00.000 | Project meeting :Taylor, James | NULL | Taylor | James |
+----+-------------------------+-----------------------------------+----------+-----------+----------+
| 36 | 2019-09-30 10:25:00.000 | Pre sales : Hayes, John | 2 | Hayes | John |
+----+-------------------------+-----------------------------------+----------+-----------+----------+
| 47 | 2019-09-30 10:30:00.000 | Project meeting :Manning, Richard | 425 | Manning | Richard |
+----+-------------------------+-----------------------------------+----------+-----------+----------+
| 50 | 2019-09-30 14:30:00.000 | Closure meeting :Kuruvita, Peter | NULL | Kuruvita | Peter |
+----+-------------------------+-----------------------------------+----------+-----------+----------+
Идея вкратце:
CROSS APPLY
будет использовать трюк с XML, чтобы сначала разбить вашу строку на :
, а затем на ,
. Полученный XML будет выглядеть следующим образом:
<x>
<y>Project meeting </y>
</x>
<x>
<y>Manning</y>
<y> Richard </y>
</x>
Мы можем использовать XPath /x[2]
, чтобы получить часть после :
и /y[1]
или /y[2]
, чтобы получить первый иливторой фрагмент имени. Остальное обрезается ...
Я оставляю за вами возможность сформулировать соединение с вашим клиентским столом, это должно быть легко ...