Solved

MS SQL Query

Posted on 2014-10-10
6
114 Views
Last Modified: 2014-10-10
Hi,

I have a field that contains data like this:

 1 4965 ^^<>1952</>
 1 4965 ^
 1 2365 ^^<>1952</>
 1 5422 ^
 1 5433 ^^<>1800</>

There is space before 1 as well.

I would like to run a query to extract the value between <></> and when I don't have <></> to just return ''. So the result should be

1952

1952

1800

Can you please help me with the query?

Thanks.
0
Comment
Question by:ezzadin
[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
  • 2
  • 2
  • 2
6 Comments
 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 40374316
Something like this perhaps:
SELECT CASE 
		WHEN CHARINDEX('<>', Field) > 0 THEN
			CASE 
				WHEN CHARINDEX('</>', Field) > 0 THEN
					CASE 
						WHEN CHARINDEX('<>', Field) < CHARINDEX('</>', Field) THEN SUBSTRING(Field, CHARINDEX('<>', Field) + 2, CHARINDEX('</>', Field) - CHARINDEX('<>', Field) - 2)
						ELSE ''
					END
				ELSE ''
			END
		ELSE ''
	END
FROM	MyTable

Open in new window

0
 
LVL 75

Accepted Solution

by:
Anthony Perkins earned 500 total points
ID: 40374318
This is how I tested it:
DECLARE @MyTable table (Field CHAR(50))
INSERT @MyTable(Field)
VALUES ('1 4965 ^^<>1952</>'), 
		('1 4965 ^'),
		('1 2365 ^^<>1952</>'), 
		('1 5422 ^'), 
		(' 1 5433 ^^<>1800</>')

SELECT CASE 
		WHEN CHARINDEX('<>', Field) > 0 THEN
			CASE 
				WHEN CHARINDEX('</>', Field) > 0 THEN
					CASE 
						WHEN CHARINDEX('<>', Field) < CHARINDEX('</>', Field) THEN SUBSTRING(Field, CHARINDEX('<>', Field) + 2, CHARINDEX('</>', Field) - CHARINDEX('<>', Field) - 2)
						ELSE ''
					END
				ELSE ''
			END
		ELSE ''
	END
FROM	@MyTable

Open in new window

0
 
LVL 49

Expert Comment

by:PortletPaul
ID: 40374325
|             FIELDX | LFT | RGT | COLUMN_3 |
|--------------------|-----|-----|----------|
| 1 4965 ^^<>1952</> |   8 |  16 |     1952 |
|           1 4965 ^ |   0 |   0 |   (null) |
| 1 2365 ^^<>1952</> |   8 |  16 |     1952 |
|           1 5422 ^ |   0 |   0 |   (null) |
| 1 5433 ^^<>1800</> |   8 |  16 |     1800 |

Open in new window


select
        fieldx
      , ca.lft
      , ca.rgt
      , case when ca.lft > 4 and ca.rgt > 3 then substring(fieldx,ca.lft+4,(ca.rgt-ca.lft)-4) else NULL end
from table1
cross apply (
            select patindex('%^^<>%',fieldx), patindex('%</>%',fieldx)
             ) ca (lft, rgt)

Open in new window


CREATE TABLE Table1
	([fieldx] varchar(40))
;
	
INSERT INTO Table1
	([fieldx])
VALUES
	('1 4965 ^^<>1952</>'),
	('1 4965 ^'),
	('1 2365 ^^<>1952</>'),
	('1 5422 ^'),
	('1 5433 ^^<>1800</>')
; 

Open in new window

http://sqlfiddle.com/#!3/2897a/1
0
Edgartown IT Case Study

Learn about Edgartown's quest to ensure the safety and security of the entire town's employee and citizen data. Read the case study!

 

Author Closing Comment

by:ezzadin
ID: 40374326
Worked. Great. Thanks.
0
 

Author Comment

by:ezzadin
ID: 40374328
@PortletPaul, sorry, I saw your solution after accepting Anthony's.
0
 
LVL 49

Expert Comment

by:PortletPaul
ID: 40374330
yes, an 18 second gap between those events :)

no matter. I like using cross apply for these sorts of queries as the aliases (such as "lft") can then be used in the select clause making it a bit easier to understand (in my view)
0

Featured Post

Salesforce Made Easy to Use

On-screen guidance at the moment of need enables you & your employees to focus on the core, you can now boost your adoption rates swiftly and simply with one easy tool.

Question has a verified solution.

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

Introduction: When running hybrid database environments, you often need to query some data from a remote db of any type, while being connected to your MS SQL Server database. Problems start when you try to combine that with some "user input" pass…
In this article I will describe the Detach & Attach method as one possible migration process and I will add the extra tasks needed for an upgrade when and where is applied so it will cover all.
This is a high-level webinar that covers the history of enterprise open source database use. It addresses both the advantages companies see in using open source database technologies, as well as the fears and reservations they might have. In this…
Michael from AdRem Software outlines event notifications and Automatic Corrective Actions in network monitoring. Automatic Corrective Actions are scripts, which can automatically run upon discovery of a certain undesirable condition in your network.…

707 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