पता नहीं, ऐसा कुछ हो सकता है:
with cte as (
select col1, regexp_split_to_array(col1, ' ') as d
from Table1
)
select col1
from cte
order by
d[1] ~ '^([0-9]+[.]?[0-9]*|[.][0-9]+)$' desc,
case
when d[1] ~ '^([0-9]+[.]?[0-9]*|[.][0-9]+)$' then
d[1]::numeric
end,
d[2]
यह स्ट्रिंग को रिक्त स्थान से सरणी में विभाजित करता है, पहली प्रविष्टि को संख्यात्मक में परिवर्तित करता है और इस संख्या और शेष स्ट्रिंग द्वारा परिणाम सॉर्ट करता है