This one is too fun to pass up...
Here's a start... it gets the 2nd element:
WITH TMP_TAB (shortstring)
AS ( SELECT SUBSTR(COL1, (LOCATE(';', COL1)+1)) from mytable)
select SUBSTR(shortstring, 1, locate(';', shortstring)-1) from tmp_tab;
Recursion could probably make this pretty slick, allowing you to get the 3rd, 4th, etc... good luck!
(Or you could just write a UDF that uses Java or some other language that lends itself to this sort of thing)