You could create a new column in the table and using the field calculator cut the number out of the string using right()
orleft()
(You can use one inside the other).
If you set the column to type:integer then you don't have to worry about trailing spaces you may have picked up with the difference between 2 and 3 digit numbers, but you won't get a numerically ordered list as QGIS likes to number (e.g: 1,2,3,4,5,27,45) in a weird manner (1,2,27,3,4,45,5). Retain your new column a type:text and a zero to the start of you smaller number (01, 02, 03) and that should then be ordered (e.g: 01,02,03,04,05,27,45).
The left image is an ordered text column, the right image is an order integer column.
You could create a new column in the table and using the field calculator cut the number out of the string using right()
orleft()
(You can use one inside the other).
If you set the column to type:integer then you don't have to worry about trailing spaces you may have picked up with the difference between 2 and 3 digit numbers, but you won't get a numerically ordered list as QGIS likes to number (e.g: 1,2,3,4,5,27,45) in a weird manner (1,2,27,3,4,45,5). Retain your new column a type:text and a zero to the start of you smaller number (01, 02, 03) and that should then be ordered (e.g: 01,02,03,04,05,27,45).
The left image is an ordered text column, the right image is an order integer column.
UPDATE
If it's you 'TXT' column you are trying to order by then run these expressions to update the column:
trim(substr("TXT",4,3))
This extracts just the number and clean any spaces from the string.
CASE WHEN length("TXT") < 3 THEN '0' + "TXT" ELSE "TXT" END
This will check for any number under 3 digits and add a 0 to the front, leaving the 3 digit numbers alone