Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

substring with defined delimiters

Posted on 2006-06-09
14
Medium Priority
?
697 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
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
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 1000 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

Independent Software Vendors: 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

A Stored Procedure in Microsoft SQL Server is a powerful feature that it can be used to execute the Data Manipulation Language (DML) or Data Definition Language (DDL). Depending on business requirements, a single Stored Procedure can return differe…
Recently we ran in to an issue while running some SQL jobs where we were trying to process the cubes.  We got an error saying failure stating 'NT SERVICE\SQLSERVERAGENT does not have access to Analysis Services. So this is a way to automate that wit…
This videos aims to give the viewer a basic demonstration of how a user can query current session information by using the SYS_CONTEXT function
Viewers will learn how to use the SELECT statement in SQL and will be exposed to the many uses the SELECT statement has.

636 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