Solved

Update statement - using substring

Posted on 2007-04-07
12
1,143 Views
Last Modified: 2008-01-09
I have an update statement that currently looks like this...

UPDATE    tbldata
SET              data = (SELECT     tblEx.[4KD]
                           FROM         tblEx INNER JOIN
                                                  tblDa ON tblEx.ID = SUBSTRING(tblDa.Data, 1, 3))

The question I have is that my data column looks like this - 101000ABC and I don't want to set the entire column equal to the new value. I only want to update a part of it using substring, but I dont know the syntax of how to do that here. I have tried SET SUBSTRING(data,4,3) = .... but that did not work.

Thanks.
0
Comment
Question by:jandhb
  • 6
  • 5
12 Comments
 
LVL 39

Expert Comment

by:appari
ID: 18869623
try

UPDATE    tbldata
SET            data   = substring(data,1,3) + (SELECT     tblEx.[4KD]
                           FROM         tblEx INNER JOIN
                                                  tblDa ON tblEx.ID = SUBSTRING(tblDa.Data, 1, 3)) + substring(data,7,len(data)-7)
0
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 18869838
please try the following syntax:

UPDATE    tbldata
SET    data = tblEx.[4KD]
FROM  tblData        
INNER JOIN tblEx
  ON tblEx.ID = SUBSTRING(tblDa.Data, 1, 3))
0
 
LVL 1

Author Comment

by:jandhb
ID: 18869964
angelll, yours had a syntax error.
appari, yours worked, almost. :) Here is what is going on. It updated both records in tbldata. In other words, I have two records in tblData that look like this...

101000ABC
202000DEF
 
And then in tblEx I have one record right now with an ID of 101. So...in this particular case it should have only updated the record starting with 101. Thoughts?
0
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 18870051
sorry, a ) too much at the end

UPDATE    tbldata
SET    data = tblEx.[4KD]
FROM  tblData        
INNER JOIN tblEx
  ON tblEx.ID = SUBSTRING(tblData.Data, 1, 3)
0
 
LVL 1

Author Comment

by:jandhb
ID: 18870966
angelll, that is not what I'm looking for. Running that query replaces the data completely, not just the characters 4,3.

appari query does this and works, except for the issue I mentioned before about it updating all records.
0
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 18871846
ok:

UPDATE    tbldata
SET    data   = substring(data,1,3) + tblEx.[4KD]  + substring(data,7,len(data)-7)
FROM  tblData        
INNER JOIN tblEx
  ON tblEx.ID = SUBSTRING(tblData.Data, 1, 3)
0
Control application downtime with dependency maps

Visualize the interdependencies between application components better with Applications Manager's automated application discovery and dependency mapping feature. Resolve performance issues faster by quickly isolating problematic components.

 
LVL 1

Author Comment

by:jandhb
ID: 18872923
angelll, that worked and I will award the points to you, but before I do may I ask one more question? How would update two parts of the string in tblData. Right now it is updating only the "x's" in this example here... 101XXXABC But what if I wanted to update it like this... 101XXXXXX Make sense?

In other words, I was trying something that like...

UPDATE    tbldata
SET    data   = substring(data,1,3) + tblEx.[4KDI]  + substring(data,7,len(data)-6),
SET    data   = substring(data,1,3) + tblEx.[STT]  + substring(data,7,len(data)-6)
FROM  tblData  
INNER JOIN tblEx
  ON tblEx.ID = SUBSTRING(tblData.Data, 1, 3)

But that did not quite work.
0
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 18872945
updating 2 parts is of course possible, but not sure what you mean exactly?
your explanation does not match the syntax try.
please retry to formulate the explanation...
0
 
LVL 1

Author Comment

by:jandhb
ID: 18872997
Currently in tblData my string looks like this...

101000ABC

At this point with your previous solution the "000" is being updated with the 4KD data in tblEx. I am now asking how you would also update the "ABC" data with the STT data in tblEx.

Is that clear?
0
 
LVL 142

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 50 total points
ID: 18873036
ok, so you mean this:
UPDATE    tbldata
SET    data   = substring(data,1,3) + tblEx.[4KDI]  + tblEx.[STT]  + substring(data,10,len(data)-9)
FROM  tblData  
INNER JOIN tblEx
  ON tblEx.ID = SUBSTRING(tblData.Data, 1, 3)
0
 
LVL 1

Author Comment

by:jandhb
ID: 18873791
that is exactly right.

may i ask you what this portion means - substring(data,10,len(data)-9)
0
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 18874588
that gets the characters from position 10 to the end...
0

Featured Post

[Webinar] Disaster Recovery and Cloud Management

Learn from Unigma and CloudBerry industry veterans which providers are best for certain use cases and how to lower cloud costs, how to grow your Managed Services practice in IaaS clouds, and how to utilize public cloud for Disaster Recovery

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
Using examples as well as descriptions, and references to Books Online, show the different Recovery Models available in SQL Server and explain, as well as show how full, differential and transaction log backups are performed
Via a live example, show how to set up a backup for SQL Server using a Maintenance Plan and how to schedule the job into SQL Server Agent.

920 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

16 Experts available now in Live!

Get 1:1 Help Now