Solved

MS SQL Query

Posted on 2014-10-10
6
103 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
  • 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 48

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
Efficient way to get backups off site to Azure

This user guide provides instructions on how to deploy and configure both a StoneFly Scale Out NAS Enterprise Cloud Drive virtual machine and Veeam Cloud Connect in the Microsoft Azure Cloud.

 

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 48

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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
CONVERT date time to a different time zone. 2 44
Query 14 54
Storage Spaces 3 39
Unable to save view in SSMS 21 57
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 Copy Database Wizard 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 Micro Tutorial hows how you can integrate  Mac OSX to a Windows Active Directory Domain. Apple has made it easy to allow users to bind their macs to a windows domain with relative ease. The following video show how to bind OSX Mavericks to …
This is used to tweak the memory usage for your computer, it is used for servers more so than workstations but just be careful editing registry settings as it may cause irreversible results. I hold no responsibility for anything you do to the regist…

911 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

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now