?
Solved

SQL string iteration function

Posted on 2013-05-20
3
Medium Priority
?
681 Views
Last Modified: 2013-05-20
Morning,
I have the following values in a table which I need to extract the numerical value combinations. All the values follow the same pattern with underscores.
A-FP_1234_5678_EF
Can I pls have some help to create a simple function that will loop thru and return the 2 sets of numbers from the passed string being 1234 and 5678

Thanks
0
Comment
Question by:CraigLazar
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 16

Accepted Solution

by:
Surendra Nath earned 1200 total points
ID: 39180387
give it a whirl

create function dbo.slice
(
 @t varchar(1000)
)
returns @slicedRows Table
(
  NumbericalPart    BIGINT
)
AS
BEGIN
declare @first_ int 
declare @second_ int 
declare @third_ int 

set @first_ = charindex('_',@t)
set @second_ = charindex('_',@t,@first_ + 1 )
set @third_ = charindex('_',@t,@second_ + 1 )
insert into  @slicedRows 
select CAST(substring(@t,@first_+1,@second_- @first_-1) as BIGINT)
UNION ALL
select CAST(substring(@t,@second_+1,@third_-@second_-1) as BIGINT)
return
END

Open in new window


the values are returned when you do the below

select * from dbo.slice('A-FP_1234_5678_EF')

Open in new window


Remember the function does return a table so, you need to do a cross apply if want to join it in a where clause.
0
 
LVL 8

Expert Comment

by:jpgobert
ID: 39180390
There may be a better way but here's what I'm thinking...  If your data always follows that format then you have three underscore characters that you need to know the positions of.

Declare @POS1 int  //position of the first _
Declare @POS2 int  //position of the second _
Declare @POS3 int  //position of the third _
Declare @NumberSet1 varchar(10)  //First string of #'s
Declare @NumberSet2 varchar(10)  //Second string of #'s

// You can use something other than varchar in the last two... i don't know your data...

// The next three lines will set the positions of the _ chars into the three variables

Set @POS1 = CharIndex("_", string, 1)
Set @POS2 = CharIndex("_", string, @POS1+1)
Set @POS3 = CharIndex("_", string, @POS2+1)

// Now that you know where the _ characters are you can use substring to capture them

Set @NumberSet1 = SubString(string, (@POS1+1), (@POS2 - @POS1 - 1))
Set @NumberSet2 = SubString(string, (@POS2 + 1), (@POS3 - @POS2 - 1))


Hope it helps...
0
 
LVL 4

Author Closing Comment

by:CraigLazar
ID: 39180558
Thanks Neo, perfect, just made some adjustements, returning BIGINT instead of table and created 2 functions each for number 1 and number 2
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The Delta outage: 650 cancelled flights, more than 1200 delayed flights, thousands of frustrated customers, tens of millions of dollars in damages – plus untold reputational damage to one of the world’s most trusted airlines. All due to a catastroph…
For both online and offline retail, the cross-channel business is the most recent pattern in the B2C trade space.
Via a live example combined with referencing Books Online, show some of the information that can be extracted from the Catalog Views in SQL Server.
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.
Suggested Courses

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question