Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

SQL - Update Query with Case Condition

Posted on 2011-02-16
16
Medium Priority
?
490 Views
Last Modified: 2012-05-11
SQL 2008 / 2005

I am trying to update a Column with Conditions :- If the Column Value has 9 digits, then Add 2 Zeros on its Prefix, If the Column Value has 8 digits, then Add 3 zeros on its Prefix.

This is an Update Query, - I am not sure, how to fix this issue.

0
Comment
Question by:chokka
[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
  • 6
  • 4
  • 3
  • +3
16 Comments
 
LVL 27

Expert Comment

by:Shaun Kline
ID: 34908896
If you use the Right command, you can achieve what you want:
RIGHT('000000000' + <field>, 9)

If you need to limit it to just fields with 8 or 9 digits, use a where clause that filters for values with lengths of 8 or 9.
0
 
LVL 23

Expert Comment

by:Rajkumar Gs
ID: 34908912
If the column is of integer datatype, try this query with cast
UPDATE YourTable
SET YourColumn = REPLICATE('0', 11 - LEN(CAST(YourColumn AS VARCHAR))) + CAST(YourColumn AS VARCHAR)
0
 

Author Comment

by:chokka
ID: 34908923


Name of the Table : BalanceReport

Name of the Column : NDC Varchar(50)
0
Learn Veeam advantages over legacy backup

Every day, more and more legacy backup customers switch to Veeam. Technologies designed for the client-server era cannot restore any IT service running in the hybrid cloud within seconds. Learn top Veeam advantages over legacy backup and get Veeam for the price of your renewal

 
LVL 13

Expert Comment

by:devlab2012
ID: 34908930
It will make the length 9 characters by appending zeros in the beginning.

update TblName set colName = right('000000000' + colName, 9)

It will work if you colName if of varchar type, you cannot prefix zeros in the numeric types
0
 
LVL 23

Expert Comment

by:Rajkumar Gs
ID: 34908934
REPLICATE will repeats the '0' so that total 11 characters will be there in result.
0
 
LVL 1

Expert Comment

by:Andrei Hetel
ID: 34908939
Something like that:  
update mytable  
 set prefix = case LEN(prefix)
                        when 9 then '00' + prefix
                        when 8 then '000' + prefix
                    end
0
 
LVL 23

Expert Comment

by:Rajkumar Gs
ID: 34908955
For VARCHAR Column, no need of that CASTing. Try this query
UPDATE YourTable
SET YourColumn = REPLICATE('0', 11 - LEN(YourColumn)) + YourColumn
0
 

Author Comment

by:chokka
ID: 34908980
Rajkumar and Devlab :-

In my Query, i need a condition whether total number of digits are 8 or 9

Based on that i need to add prefix zeros.

total number of digits in that column should be 11.
0
 
LVL 8

Expert Comment

by:rushShah
ID: 34909005

update BalanceReport
set NDC =case when len(NDC)=9 then '00' + NDC  when len(NDC )=8 then '000' + NDC

Open in new window

0
 
LVL 23

Expert Comment

by:Rajkumar Gs
ID: 34909007
Updated my query

UPDATE BalanceReport
SET NDC = REPLICATE('0', 11 - LEN(NDC)) + NDC
WHERE LEN(NDC) IN (8, 9)


create table #BalanceReport
(
	NDC varchar(50)
)

insert into #BalanceReport
select '12' union
select '1' union
select '12345' union
select '12345678'

UPDATE #BalanceReport
SET NDC = REPLICATE('0', 11 - LEN(NDC)) + NDC 
WHERE LEN(NDC) IN (8, 9)

select * from #BalanceReport

drop table #BalanceReport

Open in new window

0
 
LVL 8

Accepted Solution

by:
rushShah earned 2000 total points
ID: 34909008
sorry try this,


update BalanceReport
set NDC =case when len(NDC)=9 then '00' + NDC  when len(NDC )=8 then '000' + NDC end

Open in new window

0
 

Author Comment

by:chokka
ID: 34909123
rushshah,

Thank you.

There is a small correction, i request your help in the Case Statement.

Some Columns already have 11 digits, in that scenario - we need to ignore.
Now the Case Condition runs all the Columns irrespective whether they have 7 or 8 or 9 or 10 or 11 digits.

If they have 7, we need to add 4 zeros
if they have 11, we dont want any zeros.

From your case condition, i am able to modify 7,8,9,10 length.
But for 11 digit length .. ?
0
 
LVL 23

Expert Comment

by:Rajkumar Gs
ID: 34909160
chokka:
Did you try my query - http:#34909007 ?
0
 

Author Comment

by:chokka
ID: 34909191
Rajkumar, Thank you for helping me.

I have not tried your query. Reason is that i - I am also concerned about QUery Performance.

In your query, you are creating a Temp Table and then Inserting .. Query Cost Estimation would be high.

0
 
LVL 23

Expert Comment

by:Rajkumar Gs
ID: 34909253
Oh man. That was for demonstrating purpose only
I was trying to show you how this query works with sample data
You need to query that I posted first in that comment alone.

Any way - Nice to see you got the solution.
Raj
0
 
LVL 8

Expert Comment

by:rushShah
ID: 34913256
hi chokka,

you can add different length case statements, for length=11, you don't need to add any condition as we don't need to update,

you can try like this,

you can also try Rajkumar's query which does the same thing in better readable format.
update BalanceReport
set NDC =case when len(NDC)=10 then '0' + NDC when len(NDC)=9 then '00' + NDC when len(NDC)=8 then '000' + NDC  when len(NDC )=7 then '0000' + NDC   when len(NDC )=6 then '00000' + NDC end

Open in new window

0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Microsoft Access is a place to store data within tables and represent this stored data using multiple database objects such as in form of macros, forms, reports, etc. After a MS Access database is created there is need to improve the performance and…
Backups and Disaster RecoveryIn this post, we’ll look at strategies for backups and disaster recovery.
Video by: Steve
Using examples as well as descriptions, step through each of the common simple join types, explaining differences in syntax, differences in expected outputs and showing how the queries run along with the actual outputs based upon a simple set of dem…
In this video, Percona Director of Solution Engineering Jon Tobin discusses the function and features of Percona Server for MongoDB. How Percona can help Percona can help you determine if Percona Server for MongoDB is the right solution for …

618 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