Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
rtpnc
Starting Member
19 Posts |
Posted - 2007-07-31 : 13:06:26
|
| Well we have a full name field that has FirstName, Middle name or Initial, Last Name. Right now our query does not work well because of the full name field. We thought we should break this field into three fields Firstname, middlename, lastname. We are new to sql (of course) so if anyone can help us out that would be very very helpful.This table is updated every night by a csv file ftped to our server. The table has 400-500K rows on average. Thanks again. |
|
|
X002548
Not Just a Number
15586 Posts |
|
|
rtpnc
Starting Member
19 Posts |
Posted - 2007-07-31 : 13:23:50
|
| Ok, CREATE TABLE [dbo].[tblRORE7] ( [NAME1] [nvarchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [NAME2] [nvarchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [ADDR1] [nvarchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [ADDR2] [nvarchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [CITY] [nvarchar] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [STA] [nvarchar] (2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [ZIPC] [nvarchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ) ON [PRIMARY]GONAME1 - EXAMPLESBOUFFARD GERALDINE BUTLERBOLES JOHN HBOLES JOHN HSNODY DEWEY SANFORDSNODY DEWEY SANFORDSNODY DEWEY SANFORDSNODY DEWEY SANFORDSNODY DEWEY SANFORDSNODY DEWEY SANFORDHANKS JERRY LEEHANKS JERRY LEESPARKS CAROL HALLSPARKS CAROL HALLHANKS MARY ADKINSHARRIS CHARLIE ROBERTHARRIS CHARLIE ROBERTPATTERSON NINA WILLIAMSPATTERSON NINA WILLIAMSPATTERSON SANDRA DARESTANLEY NANNIE FAINSTANLEY NANNIE FAINSTANLEY NANNIE FAINSTANLEY NANNIE FAINHARVEY MICHELLE DEMETRIAHARVEY MICHELLE DEMETRIAWe are really only interested in the first name and lastname. |
 |
|
|
X002548
Not Just a Number
15586 Posts |
|
|
X002548
Not Just a Number
15586 Posts |
Posted - 2007-07-31 : 13:44:10
|
| [code]CREATE TABLE #myTemp99(Col1 varchar(8000))GOINSERT INTO #myTemp99(Col1)SELECT 'BOUFFARD GERALDINE BUTLER'AS FULLNAME UNION ALLSELECT 'BOLES JOHN H'AS FULLNAME UNION ALLSELECT 'BOLES JOHN H'AS FULLNAME UNION ALLSELECT 'SNODY DEWEY SANFORD'AS FULLNAME UNION ALLSELECT 'SNODY DEWEY SANFORD'AS FULLNAME UNION ALLSELECT 'SNODY DEWEY SANFORD'AS FULLNAME UNION ALLSELECT 'SNODY DEWEY SANFORD'AS FULLNAME UNION ALLSELECT 'SNODY DEWEY SANFORD'AS FULLNAME UNION ALLSELECT 'SNODY DEWEY SANFORD'AS FULLNAME UNION ALLSELECT 'HANKS JERRY LEE'AS FULLNAME UNION ALLSELECT 'HANKS JERRY LEE'AS FULLNAME UNION ALLSELECT 'SPARKS CAROL HALL'AS FULLNAME UNION ALLSELECT 'SPARKS CAROL HALL'AS FULLNAME UNION ALLSELECT 'HANKS MARY ADKINS'AS FULLNAME UNION ALLSELECT 'HARRIS CHARLIE ROBERT'AS FULLNAME UNION ALLSELECT 'HARRIS CHARLIE ROBERT'AS FULLNAME UNION ALLSELECT 'PATTERSON NINA WILLIAMS'AS FULLNAME UNION ALLSELECT 'PATTERSON NINA WILLIAMS'AS FULLNAME UNION ALLSELECT 'PATTERSON SANDRA DARE'AS FULLNAME UNION ALLSELECT 'STANLEY NANNIE FAIN'AS FULLNAME UNION ALLSELECT 'STANLEY NANNIE FAIN'AS FULLNAME UNION ALLSELECT 'STANLEY NANNIE FAIN'AS FULLNAME UNION ALLSELECT 'STANLEY NANNIE FAIN'AS FULLNAME UNION ALLSELECT 'HARVEY MICHELLE DEMETRIA'AS FULLNAME UNION ALLSELECT 'HARVEY MICHELLE DEMETRIA' AS FULLNAMEGOSELECT DISTINCT '"'+SUBSTRING(Col1,1,POS1-1)+'"' AS Last_Name , '"'+SUBSTRING(Col1,POS1+1,POS2-POS1-1)+'"' AS First_Name FROM ( SELECT Col1 , CHARINDEX(' ',Col1) AS POS1 , CHARINDEX(' ',Col1,CHARINDEX(' ',Col1)+1) AS POS2 FROM #myTemp99) AS XXXGODROP TABLE #myTemp99GO[/code]Brett8-)Hint: Want your questions answered fast? Follow the direction in this linkhttp://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspxAdd yourself!http://www.frappr.com/sqlteam |
 |
|
|
Kristen
Test
22859 Posts |
Posted - 2007-07-31 : 13:44:27
|
Assuming that your [NAME1] column has 3 "pieces" of data, and they are separated by a space; and that you add three NEW columns for the individual pieces of data, then the following will update the table and "split" the 3 pieces of data.DECLARE @I1 int, @I2 int, @I3 intUPDATE USET @I1 = CHARINDEX(' ', NAME1 + ' ') , [NEW_COLUMN_1] = LEFT(NAME1, @I1-1) , @I2 = NullIf(CHARINDEX(' ', NAME1 + ' ', @I1+1), 0) , [NEW_COLUMN_2] = SUBSTRING(NAME1, @I1+1, @I2-@I1-1) , @I3 = NullIf(CHARINDEX(' ', NAME1 + ' ', @I2+1), 0) , [NEW_COLUMN_3] = SUBSTRING(NAME1, @I2+1, @I3-@I2-1)FROM dbo.tblRORE7 AS UBackup first!!Kristen |
 |
|
|
rtpnc
Starting Member
19 Posts |
Posted - 2007-07-31 : 14:18:00
|
| Kristen that worked so good, thank you so much!The other thing is now we get a new updated csv file on our server everynight. We run a dts package that runs this file and puts the data in the table but now we have these 3 new rows ( fname, lname and mname) how do we account for these when we run the update every night?Thanks. |
 |
|
|
Kristen
Test
22859 Posts |
Posted - 2007-08-01 : 01:43:41
|
| I would either run a scheduled job after the DTS import (or as part of it), or create a Trigger on that table that will populate the extra 3 columnsKristen |
 |
|
|
tanaka
Starting Member
1 Post |
Posted - 2011-05-19 : 01:50:09
|
| CREATE TABLE TEMPNAME(NAME1 CHAR(100),NEW_COLUMN_1 CHAR(100),NEW_COLUMN_2 CHAR(100),NEW_COLUMN_3 CHAR(100))UPDATE TEMPNAME SET NEW_COLUMN_1 = RTRIM(LTRIM(SUBSTRING(NAME1,1,LEN(NAME1)))) UPDATE TEMPNAME SET NEW_COLUMN_2 = RTRIM(LTRIM(SUBSTRING(NEW_COLUMN_1,CHARINDEX(' ',NEW_COLUMN_1),LEN(NEW_COLUMN_1)))) UPDATE TEMPNAME SET NEW_COLUMN_3 = RTRIM(LTRIM(SUBSTRING(NEW_COLUMN_2,CHARINDEX(' ',NEW_COLUMN_2),LEN(NEW_COLUMN_2)))) UPDATE TEMPNAME SET NEW_COLUMN_1 = REPLACE(NEW_COLUMN_1,NEW_COLUMN_2,'') , NEW_COLUMN_2 = REPLACE(NEW_COLUMN_2,NEW_COLUMN_3,'') UPDATE TEMPNAME SET NEW_COLUMN_2 = '', NEW_COLUMN_3 = NEW_COLUMN_2WHERE LEN(NEW_COLUMN_2) > 1 |
 |
|
|
|
|
|
|
|