No creo que SQL Server tenga una función de división integrada, por lo que aparte de un UDF, la única otra respuesta que conozco es secuestrar la función PARSENAME:
SELECT PARSENAME(REPLACE('Hello John Smith', ' ', '.'), 2)
PARSENAME toma una cadena y la divide en el carácter de punto. Toma un número como su segundo argumento, y ese número especifica qué segmento de la cadena devolver (trabajando de atrás hacia adelante).
SELECT PARSENAME(REPLACE('Hello John Smith', ' ', '.'), 3) --return Hello
El problema obvio es cuando la cadena ya contiene un punto. Sigo pensando que usar un UDF es la mejor manera... ¿Alguna otra sugerencia?