Solved

Update statement - using substring

Posted on 2007-04-07
12
1,155 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 143

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
Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

 
LVL 143

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 143

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
 
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 143

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 143

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 143

Expert Comment

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

Featured Post

Free learning courses: Active Directory Deep Dive

Get a firm grasp on your IT environment when you learn Active Directory best practices with Veeam! Watch all, or choose any amount, of this three-part webinar series to improve your skills. From the basics to virtualization and backup, we got you covered.

Question has a verified solution.

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

Suggested Solutions

JSON is being used more and more, besides XML, and you surely wanted to parse the data out into SQL instead of doing it in some Javascript. The below function in SQL Server can do the job for you, returning a quick table with the parsed data.
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
Via a live example combined with referencing Books Online, show some of the information that can be extracted from the Catalog Views in SQL Server.
Viewers will learn how the fundamental information of how to create a table.

790 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