If you know only two delimiters will be within your column result.
You could use TSQL string functions in conjunction to get your desired result.
Here is a bit of SQL that will do the job.
with TabDelimOfValue as (
select '123-456-789' val
union select '12-345-6789'
union select '1-234-56789'
union select '1-2345-6789'
union select '1-23456-789'
union select '1-234567-89'
union select '1-2345678-9'
)
select
charindex('-', val) delimPos1,
len(val) - charindex('-', reverse(val)) + 1 delimPos2,
substring(val, 0, charindex('-', val)) Sub1,
substring(val, (charindex('-', val) + 1), (len(val) - charindex('-', reverse(val)) - charindex('-', val))) Sub2,
substring(val, len(val) - charindex('-', reverse(val)) + 2, (charindex('-', reverse(val)) - 1)) Sub3,
val
from TabDelimOfValue;
Even though it can be done this way, it is hard to understand what is happening in the statement and will be difficult to maintain.
I would suggest using a user defined function as specified in solution 2 if possible.
I read an article the other day of a udf which does what you need, if I find it I will add it here.
Hope that helps out.
EDIT
Found the link - seems like you may have read this one already, it was a solution to one of your other questions.
But here it is:
http://social.technet.microsoft.com/wiki/contents/articles/26937.t-sql-splitting-a-string-into-multiple-columns.aspx[
^]