Solved

Update statement - using substring

Posted on 2007-04-07
12
1,151 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
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

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

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
SQL Server Designer 19 43
Flattening heirachies 3 31
Increment column based of a FK 8 23
Present Absent from working date rage 11 21
I wrote this interesting script that really help me find jobs or procedures when working in a huge environment. I could I have written it as a Procedure but then I would have to have it on each machine or have a link to a server-related search that …
For both online and offline retail, the cross-channel business is the most recent pattern in the B2C trade space.
Via a live example, show how to extract information from SQL Server on Database, Connection and Server properties
Viewers will learn how to use the SELECT statement in SQL to return specific rows and columns, with various degrees of sorting and limits in place.

809 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