First Create a Split function. then use the following query .
Split Function
CREATE FUNCTION dbo.Split
(
@delimited nvarchar(max),
@delimiter nvarchar(100)
) RETURNS @t TABLE
(
-- Id column can be commented out, not required for sql splitting string
id int identity(1,1), -- I use this column for numbering splitted parts
val nvarchar(max)
)
AS
BEGIN
declare @xml xml
set @xml = N'<root><r>' + replace(@delimited,@delimiter,'</r><r>') + '</r></root>'
insert into @t(val)
select
r.value('.','varchar(max)') as item
from @xml.nodes('//root/r') as records(r)
RETURN
END
GO
Test Data & Query
DECLARE @String VARCHAR(1000) = 'Education Luncheon (501-2620) - 2 - $110<br>Womens Breakfast (512-2620) - 2 - $80<br>Friday Luncheon (502-26200) - 2 - 110<br>'
SELECT LEFT(val , CHARINDEX('(', Val) -1 ) AS EventName
,REPLACE( REPLACE(
SUBSTRING(Val , CHARINDEX('(', Val) , LEN(Val) - CHARINDEX(')', Val))
,'(',''),')','') AS AccountNumber
,REPLACE(SUBSTRING(Val,
CHARINDEX(') -', Val) +2, LEN(Val) - CHARINDEX(') -', Val)
- CHARINDEX('-', REVERSE(Val)))
,'-','') AS Quantity
,PARSENAME(REPLACE(Val ,'-','.'),1) AS PricePaid
FROM dbo.Split(@String, '<br>')
WHERE NULLIF(val ,'') IS NOT NULL
Result Set
╔═════════════════════╦═══════════════╦══════════╦═══════════╗
║ EventName ║ AccountNumber ║ Quantity ║ PricePaid ║
╠═════════════════════╬═══════════════╬══════════╬═══════════╣
║ Education Luncheon ║ 501-2620 ║ 2 ║ $110 ║
║ Womens Breakfast ║ 512-2620 ║ 2 ║ $80 ║
║ Friday Luncheon ║ 502-26200 ║ 2 ║ 110 ║
╚═════════════════════╩═══════════════╩══════════╩═══════════╝