Solved

Help with MS SQL Right Function Using the Len Function

Posted on 2014-07-23
5
450 Views
Last Modified: 2014-07-23
Hi

I have a column in a table which is made up of reference numbers following a transaction matching process.  It's there to form part of an audit trail.  At the moment, it might look something like ", 88654, 12973, 84755".  It might also be empty (if no transactions matched).  I want to get rid of the comma and space at the beginning.  I don't really want to do this as part of the original run as it would slow it down, so thought it would be easiest to do a tidy up afterwards.

The problem is that I can't get the right function to work if I use the len function.  I've tried various, but at the moment, I've got:

UPDATE SAS_T_1213_RemAds SET remRef = RIGHT(conCatRem,LEN(conCatRem)-2) WHERE conCatRem IS NOT NULL;

I get the error message:

Msg 536, Level 16, State 4, Line 5
Invalid length parameter passed to the RIGHT function.

Can anyone help with this please?

Thanks
Sarah
0
Comment
Question by:ScuzzyJo
5 Comments
 
LVL 21

Accepted Solution

by:
Randy Poole earned 500 total points
ID: 40214208
try this, the value may not be null, but may be a blank or under 2 characters
UPDATE SAS_T_1213_RemAds SET remRef = RIGHT(conCatRem,LEN(conCatRem)-2) WHERE Len(conCatRem+'')>2

Open in new window

0
 
LVL 25

Expert Comment

by:SStory
ID: 40214213
Try something like this:
UPDATE SAS_T_1213_RemAds 
SET remRef = SUBSTRING(remRef,3,len(remRef)-2) 
WHERE conCatRem IS NOT NULL;

Open in new window

0
 
LVL 14

Expert Comment

by:Vikas Garg
ID: 40214214
Hi,

You need to check the length of conCatRem before passing it to the Right function so that if the Lengh is less then 2 Right function would not get any -Ve Value which is causing error

UPDATE SAS_T_1213_RemAds SET remRef = CASE WHEN LEN(conCatRem) >= 2 THNE (RIGHT(conCatRem,LEN(conCatRem)-2) ELSE conCatRem END  WHERE conCatRem IS NOT NULL;

Open in new window

0
 
LVL 48

Expert Comment

by:PortletPaul
ID: 40214224
what is the defined length of that column? let's say it is 4000

test it first, always backup...
select
SUBSTRING(remRef ,3, 4000)
from SAS_T_1213_RemAds 
where remRef like ' ,%'
;

UPDATE SAS_T_1213_RemAds 
SET remRef = SUBSTRING(remRef ,3, 4000)
where remRef like ' ,%'

Open in new window

0
 

Author Closing Comment

by:ScuzzyJo
ID: 40214301
Thanks to everyone who replied.  All the answers made sense to me, but Randy got there first and his solution works perfectly :-)
0

Featured Post

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

Introduction SQL Server Integration Services can read XML files, that’s known by every BI developer.  (If you didn’t, don’t worry, I’m aiming this article at newcomers as well.) But how far can you go?  When does the XML Source component become …
Occasionally there is a need to clean table columns, especially if you have inherited legacy data. There are obviously many ways to accomplish that, including elaborate UPDATE queries with anywhere from one to numerous REPLACE functions (even within…
Using examples as well as descriptions, and references to Books Online, show the documentation available for date manipulation functions and by using a select few of these functions, show how date based data can be manipulated with these functions.
Via a live example, show how to shrink a transaction log file down to a reasonable size.

757 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

20 Experts available now in Live!

Get 1:1 Help Now