Solved

Help with MS SQL Right Function Using the Len Function

Posted on 2014-07-23
5
456 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

Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!

Question has a verified solution.

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

This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
This article shows gives you an overview on SQL Server 2016 row level security. You will also get to know the usages of row-level-security and how it works
Familiarize people with the process of utilizing SQL Server functions from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Microsoft Ac…
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.

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

20 Experts available now in Live!

Get 1:1 Help Now