Is there a better way than this to split a string and get the first substring?
Well - here is 'another' way...

DECLARE @str AS VARCHAR(255)

SET @str = 'abc&amp;def&amp;ghi'

SELECT CASE 
        WHEN charindex('&amp;', @str) &gt; 0
            THEN substring(@str, 1, charindex('&amp;', @str) - 1)
        ELSE @str
        END AS SelectedString
-------------------------------
SET @str = 'abc'

SELECT CASE 
        WHEN charindex('&amp;', @str) &gt; 0
            THEN substring(@str, 1, charindex('&amp;', @str) - 1)
        ELSE @str
        END AS SelectedString


OR - you could simply ALWAYS concatenate '&amp;' at the end of the string like this:

DECLARE @str AS VARCHAR(255)

SET @str = 'abc&amp;def&amp;ghi'

SELECT substring(@str, 1, charindex('&amp;', @str + '&amp;') - 1)
-------------------------------
SET @str = 'abc'

SELECT substring(@str, 1, charindex('&amp;', @str + '&amp;') - 1)