CREATE CURSOR c_test (ctext C(40)) INSERT INTO c_test (ctext) VALUES ('1.1') INSERT INTO c_test (ctext) VALUES ('1.02') INSERT INTO c_test (ctext) VALUES ('10.1') INSERT INTO c_test (ctext) VALUES ('01.3') INSERT INTO c_test (ctext) VALUES ('1.02.N') INSERT INTO c_test (ctext) VALUES ('1.02.N.R') INSERT INTO c_test (ctext) VALUES ('1.10.R') INSERT INTO c_test (ctext) VALUES ('1.10.R.1') INSERT INTO c_test (ctext) VALUES ('20DP') INSERT INTO c_test (ctext) VALUES ('20') INSERT INTO c_test (ctext) VALUES ('1.02.R') LOCAL lcSelect lcSelect=[SELECT ctext,] FOR lnX=1 TO 20 lcSelect=lcSelect+[PADL(ALLTRIM(STR(VAL(GETWORDNUM(ctext,]+ALLTRIM(STR(lnX))+[,'.')))),40,'0')+]+; [PADR(CHRTRAN(GETWORDNUM(ctext,]+ALLTRIM(STR(lnX))+[,'.'),'0123456789',''),40) ]+; [as s]+ALLTRIM(STR(lnX))+; IIF(lnX<20,[,],[]) endfor lcSelect=lcSelect+[ FROM c_test ORDER BY ] FOR lnX=1 TO 20 lcSelect=lcSelect+[s]+ALLTRIM(STR(lnX))+IIF(lnX<20,[,],[]) ENDFOR &lcSelect