Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 SQL Server 2008 Forums
 SQL Server Administration (2008)
 Query Help....

Author  Topic 

sqldba20
Posting Yak Master

183 Posts

Posted - 2012-02-27 : 10:41:26
Folks:

I have a column which stores data in this format:

TR#ABC#10/12/2011
TR#XYZ#12/12/2011
TR#ABC#10/12/2011

I would like to remove the text before and after #. The output should be:

ABC
XYZ
ABC


Thanks !

Transact Charlie
Master Smack Fu Yak Hacker

3451 Posts

Posted - 2012-02-27 : 10:58:32
This should work (and be safe). As long as there are no strings with three # in them.


DECLARE @foo TABLE (
[val] VARCHAR(255)
)
INSERT @foo ([val])
VALUES
('TR#ABC#10/12/2011')
, ('tr')
, ('TR##fsafasf')
, ('#asdasda#')
, ('TR#asfasfasfasf')


SELECT
[val]
, CASE WHEN CHARINDEX('#', [sval]) = 0 THEN NULL
ELSE LEFT([sval], CHARINDEX('#', [sval]) - 1)
END AS [StrippedVal]
FROM
(
SELECT
[val] AS [val]
, CASE WHEN CHARINDEX('#', [val]) = 0 THEN NULL
ELSE RIGHT([val], LEN([val]) - CHARINDEX('#', [val]))
END AS [sval]
FROM
@foo
)
AS r


Results



(5 row(s) affected)
val StrippedVal
-------------------- --------------------
TR#ABC#10/12/2011 ABC
tr NULL
TR##fsafasf
#asdasda# asdasda
TR#asfasfasfasf NULL

(5 row(s) affected)


Charlie
===============================================================
Msg 3903, Level 16, State 1, Line 1736
The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION
Go to Top of Page
   

- Advertisement -