select
SUBSTRING(UserInfo, CHARINDEX('AC No: ',UserInfo)+7,
( select min(x*(case x when 0 then null else 1 end))
from
(
VALUES
(CHARINDEX('AC Name: ',UserInfo,CHARINDEX('AC No: ',UserInfo)+7)),
(CHARINDEX('AC Type: ',UserInfo,CHARINDEX('AC No: ',UserInfo)+7)),
(CHARINDEX('IFSC Code: ',UserInfo,CHARINDEX('AC No: ',UserInfo)+7)),
(LEN(UserInfo)+1)
)
AS value(x)
) - (CHARINDEX('AC No: ',UserInfo)+7)
)
as AC_No,
SUBSTRING(UserInfo, CHARINDEX('AC Name: ',UserInfo)+9,
( select min(x*(case x when 0 then null else 1 end))
from
(
VALUES
(CHARINDEX('AC No: ',UserInfo,CHARINDEX('AC Name: ',UserInfo)+9)),
(CHARINDEX('AC Type: ',UserInfo,CHARINDEX('AC Name: ',UserInfo)+9)),
(CHARINDEX('IFSC Code: ',UserInfo,CHARINDEX('AC Name: ',UserInfo)+9)),
(LEN(UserInfo)+1)
)
AS value(x)
) - (CHARINDEX('AC Name: ',UserInfo)+9)
)
as AC_Name,
SUBSTRING(UserInfo, CHARINDEX('IFSC Code: ',UserInfo)+11,
( select min(x*(case x when 0 then null else 1 end))
from
(
VALUES
(CHARINDEX('AC No: ',UserInfo,CHARINDEX('IFSC Code: ',UserInfo)+11)),
(CHARINDEX('AC Type: ',UserInfo,CHARINDEX('IFSC Code: ',UserInfo)+11)),
(CHARINDEX('AC Name: ',UserInfo,CHARINDEX('IFSC Code: ',UserInfo)+11)),
(LEN(UserInfo)+1)
)
AS value(x)
) - (CHARINDEX('IFSC Code: ',UserInfo)+11)
)
as IFSC_Code
from test
Then it is probably best to do this once, while you load the data into a staging table etc. and from there store these values in appropriate fields in the production table.
Fiddle Example:
https://dbfiddle.uk/?rdbms=sqlserver_2014&fiddle=a5fdfbbd6a0b4657602af39744993a91
:withSPLIT_STRINGbut that would produce rows of values, not pairs. If the data was stored in XML or JSON form you could use T-SQL's XML or JSON functions to parse the data but again, you'd end up scanning entire tables each time. And XML indexes are not as efficient as separate indexed columns