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 |
mirirom
Starting Member
7 Posts |
Posted - 2008-08-27 : 11:30:25
|
Hi, I've been writing a series of text parsing queries as part of a data scrubbing effort. Many of these require using the index location of either patterns or fixed strings in an equation that uses the LEN function. For example:UPDATE #CustomerContactSET LastName = LEFT(ContactName, CHARINDEX(',', ContactName) - 1),FirstName = RIGHT(ContactName, LEN(ContactName) - CHARINDEX(',', ContactName) - 1) This is one example where I'll typically see an error returned when the query is run"Invalid length parameter passed to the substring function."Even by adding a conditional such as FROM #CustomerContact WHERE LEN(ContactName) > 0 AND CHARINDEX(',', contactName) > 0 doesn't seem to help. I was thinking that selecting only these rows would prevent checks on NULL and empty string length in the field being parsed, but apparently not. Is there an order in which the rows are being selected before work is performed in the UPDATE statement? Really stumped by this. Any help/advice is appreciated.- B..::mirirom::.. |
|
khtan
In (Som, Ni, Yak)
17689 Posts |
Posted - 2008-08-27 : 11:37:47
|
use CASE statement to check if the ContactName contains the ','. Something like thisUPDATE #CustomerContactSET LastName = CASE WHEN CHARINDEX(',', ContactName) <> 0 THEN LEFT(ContactName, CHARINDEX(',', ContactName) - 1) ELSE ContactName END, FirstName = CASE WHEN CHARINDEX(',', ContactName) <> 0 THEN RIGHT(ContactName, LEN(ContactName) - CHARINDEX(',', ContactName) - 1) ELSE '' END KH[spoiler]Time is always against us[/spoiler] |
 |
|
mirirom
Starting Member
7 Posts |
Posted - 2008-08-27 : 11:47:56
|
Hi KH, Thanks for the reply. Unfortunately, your solution returns the same errorInvalid length parameter passed to the substring function.In the past, I'd been able to get around this error by only applying the updates to rows were LEN() would return legitimate values (i.e. by first limiting the returned rowset), but as I pointed out in my post above, even this isn't working.Thx again,- B..::mirirom::.. |
 |
|
khtan
In (Som, Ni, Yak)
17689 Posts |
Posted - 2008-08-27 : 11:52:02
|
please post the query you used and sample data KH[spoiler]Time is always against us[/spoiler] |
 |
|
mirirom
Starting Member
7 Posts |
Posted - 2008-08-27 : 11:58:11
|
[code]UPDATE #CustomerContactSET LastName = LEFT(ContactName, CHARINDEX(',', ContactName) - 1),FirstName = RIGHT(ContactName, LEN(ContactName) - CHARINDEX(',', ContactName) - 1)FROM #CustomerContact WHERE ContactName IS NOT NULL, AND LEN(ContactName) <> 0 AND CHARINDEX(',', contactName) <> 0100 rows of sample datacontactName ---------------------------------------- Alison ColwellMartina KomorAnnette SasseAmanda McIlwrathNULLDavin MillerGhoshNULLNULLpierce johnsonMarinianchengNULLRobert LewisNULLChris BorellReinhard BreitlingHaraldCynthia SidesNULLNULLDavin MillerAnnette SasseNULLNULLNULLTanaka, MiyabiEeva BrockmannNULLRobert A. BouchardMichal ShoreshWilliam KeenerHaihongNULLRenata PellegrinoRenata PellegrinoNULLPin WangMichael ChenCharles LutzNULLMichelleWanru TsengNULLIan ClarkeNULLAnnette SasseLiu, JaneNULLJim HaberNULLYossi WeizmannBurton WiceAndyNULLRenata PellegrinoCafer ErogluStephanie GuzikJim SpearowNULLNULLNULLNULLNULLJames E. HaberAnnette SasseKaushiki MenonRenata PellegrinoNULLNULLNULLNULLNULLRosangela FritaNULLNULLNULLHer AguilarMark EnglekaWanru TsengXiaoyu LiEdwin ten DamNULLLauraLeo FormenoyNULLNULLNULLNULLLiu, JaneNULLNULLNULLAaron D DenDekkerNULLNULLKendra AveryMichal RonenNULLNULL[/code] |
 |
|
khtan
In (Som, Ni, Yak)
17689 Posts |
Posted - 2008-08-27 : 12:11:01
|
tried, these sets of data is fine. No error KH[spoiler]Time is always against us[/spoiler] |
 |
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2008-08-27 : 12:14:18
|
[code]DECLARE @Sample TABLE ( contactName VARCHAR(100), firstName VARCHAR(100), lastName VARCHAR(100) )INSERT @Sample ( contactName )SELECT 'Alison Colwell' UNION ALLSELECT 'Martina Komor' UNION ALLSELECT 'Annette Sasse' UNION ALLSELECT 'Amanda McIlwrath' UNION ALLSELECT NULL UNION ALLSELECT 'Davin Miller' UNION ALLSELECT 'Ghosh' UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT 'pierce johnson' UNION ALLSELECT 'Marini' UNION ALLSELECT 'ancheng' UNION ALLSELECT NULL UNION ALLSELECT 'Robert Lewis' UNION ALLSELECT NULL UNION ALLSELECT 'Chris Borell' UNION ALLSELECT 'Reinhard Breitling' UNION ALLSELECT 'Harald' UNION ALLSELECT 'Cynthia Sides' UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT 'Davin Miller' UNION ALLSELECT 'Annette Sasse' UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT 'Tanaka, Miyabi' UNION ALLSELECT 'Eeva Brockmann' UNION ALLSELECT NULL UNION ALLSELECT 'Robert A. Bouchard' UNION ALLSELECT 'Michal Shoresh' UNION ALLSELECT 'William Keener' UNION ALLSELECT 'Haihong' UNION ALLSELECT NULL UNION ALLSELECT 'Renata Pellegrino' UNION ALLSELECT 'Renata Pellegrino' UNION ALLSELECT NULL UNION ALLSELECT 'Pin Wang' UNION ALLSELECT 'Michael Chen' UNION ALLSELECT 'Charles Lutz' UNION ALLSELECT NULL UNION ALLSELECT 'Michelle' UNION ALLSELECT 'Wanru Tseng' UNION ALLSELECT NULL UNION ALLSELECT 'Ian Clarke' UNION ALLSELECT NULL UNION ALLSELECT 'Annette Sasse' UNION ALLSELECT 'Liu, Jane' UNION ALLSELECT NULL UNION ALLSELECT 'Jim Haber' UNION ALLSELECT NULL UNION ALLSELECT 'Yossi Weizmann' UNION ALLSELECT 'Burton Wice' UNION ALLSELECT 'Andy' UNION ALLSELECT NULL UNION ALLSELECT 'Renata Pellegrino' UNION ALLSELECT 'Cafer Eroglu' UNION ALLSELECT 'Stephanie Guzik' UNION ALLSELECT 'Jim Spearow' UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT 'James E. Haber' UNION ALLSELECT 'Annette Sasse' UNION ALLSELECT 'Kaushiki Menon' UNION ALLSELECT 'Renata Pellegrino' UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT 'Rosangela Frita' UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT 'Her Aguilar' UNION ALLSELECT 'Mark Engleka' UNION ALLSELECT 'Wanru Tseng' UNION ALLSELECT 'Xiaoyu Li' UNION ALLSELECT 'Edwin ten Dam' UNION ALLSELECT NULL UNION ALLSELECT 'Laura' UNION ALLSELECT 'Leo Formenoy' UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT 'Liu, Jane' UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT 'Aaron D DenDekker' UNION ALLSELECT NULL UNION ALLSELECT NULL UNION ALLSELECT 'Kendra Avery' UNION ALLSELECT 'Michal Ronen' UNION ALLSELECT NULL UNION ALLSELECT NULLUPDATE @SampleSET firstName = LEFT(contactName, NULLIF(CHARINDEX(' ', contactName) - 1, -1)), lastName = SUBSTRING(contactName, NULLIF(CHARINDEX(' ', contactName) + 1, -1), LEN(contactName))SELECT *FROM @Sample[/code] E 12°55'05.25"N 56°04'39.16" |
 |
|
|
|
|
|
|