Solved

substring with defined delimiters

Posted on 2006-06-09
14
694 Views
Last Modified: 2008-03-04
hi experts,

i'm looking for an SQL function where i can extract a string but instead of start and end position to set the limits of the substring I need it with specific characters.
This would be similar to extractString in Crystal Reports.

Any ideas,

Thanks
cm
0
Comment
Question by:carlosmonte
[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
  • 7
  • 7
14 Comments
 
LVL 75

Expert Comment

by:Aneesh Retnakaran
ID: 16871758
you can use CHARINDEX('Delimitter',theString) instaed of start position andof course for lenght
0
 
LVL 75

Expert Comment

by:Aneesh Retnakaran
ID: 16871780
for example

declare @str varchar(100)
set @str = '1000-wer'
SELECT SUBSTRING(@str,CHARINDEX('-',@str)+1, LEN(@str)-CHARINDEX('-',@str)+1)
0
 
LVL 1

Author Comment

by:carlosmonte
ID: 16871920
The delimiters need to be pound "#" and closed parethesis ")"
can you show me how to do this?
Length is not a factor, i will never know the length of the substring
0
NFR key for Veeam Backup for Microsoft Office 365

Veeam is happy to provide a free NFR license (for 1 year, up to 10 users). This license allows for the non‑production use of Veeam Backup for Microsoft Office 365 in your home lab without any feature limitations.

 
LVL 75

Expert Comment

by:Aneesh Retnakaran
ID: 16871944
declare @str varchar(100)
set @str = '1000#werterq)23'
SELECT SUBSTRING(@str,CHARINDEX('#',@str)+1, CHARINDEX(')',@str)-CHARINDEX('#',@str)-1)
0
 
LVL 1

Author Comment

by:carlosmonte
ID: 16872014
I get this error message

Invalid length parameter passed to the substring function

some fields that i'm getting the substring from do not have a "#" or ")"
this needs to be taken in account
0
 
LVL 75

Expert Comment

by:Aneesh Retnakaran
ID: 16872047
OK , try this


declare @str varchar(100)
set @str = '1000#werterq23'
SELECT SUBSTRING(@str,
        CHARINDEX('#',@str)+1 ,
        CASE WHEN  CHARINDEX(')',@str)=0 THEN LEN(@Str)+1 ELSE CHARINDEX(')',@str) END
        -CHARINDEX('#',@str)-1)
0
 
LVL 1

Author Comment

by:carlosmonte
ID: 16872102
seems to be working. I just need to check the output of the data. let you know soon.
thanks
0
 
LVL 1

Author Comment

by:carlosmonte
ID: 16872718
one last thing

if there is no substring this function gives me the entire @str variable again.
I need it to be NULL or empty (preferred NULL) if there is no substring.
0
 
LVL 75

Expert Comment

by:Aneesh Retnakaran
ID: 16872803
I dont understand correctly.. can you give me a sample , presently what i am doing is i will return the entire string
0
 
LVL 1

Author Comment

by:carlosmonte
ID: 16872841
correct, it returns the entire string from @str because there is no substring with the delimiters we established.
instead though if there is no substring between those delimiters, the select should return empty string or NULL
let me know if this is clearer
0
 
LVL 75

Accepted Solution

by:
Aneesh Retnakaran earned 250 total points
ID: 16873721
Like this

declare @str varchar(100)
set @str = '1000#werterq23'
SELECT CASE WHEN LEN (SUBSTRING(@str,
        CHARINDEX('#',@str)+1 ,
        CASE WHEN  CHARINDEX(')',@str)=0 THEN LEN(@Str)+1 ELSE CHARINDEX(')',@str) END
        -CHARINDEX('#',@str)-1) ) = LEN(@Str) THEN NULL
            ELSE SUBSTRING(@str,
        CHARINDEX('#',@str)+1 ,
        CASE WHEN  CHARINDEX(')',@str)=0 THEN LEN(@Str)+1 ELSE CHARINDEX(')',@str) END
        -CHARINDEX('#',@str)-1) END
0
 
LVL 1

Author Comment

by:carlosmonte
ID: 16873723
not possible?
0
 
LVL 75

Expert Comment

by:Aneesh Retnakaran
ID: 16873743
check my last post
0
 
LVL 1

Author Comment

by:carlosmonte
ID: 16874002
yes it worked. Thanks again
0

Featured Post

Major Incident Management Communications

Major incidents and IT service outages cost companies millions. Often the solution to minimizing damage is automated communication. Find out more in our Major Incident Management Communications infographic.

Question has a verified solution.

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

Slowly Changing Dimension Transformation component in data task flow is very useful for us to manage and control how data changes in SSIS.
This article shows gives you an overview on SQL Server 2016 row level security. You will also get to know the usages of row-level-security and how it works
Familiarize people with the process of utilizing SQL Server functions from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Microsoft Ac…
Viewers will learn how to use the SELECT statement in SQL and will be exposed to the many uses the SELECT statement has.

739 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