Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
SELECT *, value=0 FROM
(
SELECT '1' AS VALUE UNION
SELECT '03' AS VALUE UNION
SELECT '10' AS VALUE UNION
SELECT '1.1' AS VALUE UNION
SELECT 'z' AS VALUE UNION
SELECT '1a' AS VALUE UNION
SELECT '2' AS VALUE
) AS t ORDER BY value=0, -value DESC, value
SELECT * FROM
(
SELECT '1' AS VALUE UNION
SELECT '03' AS VALUE UNION
SELECT '10' AS VALUE UNION
SELECT '1.1' AS VALUE UNION
SELECT '0..1' AS VALUE UNION
SELECT 'z' AS VALUE UNION
SELECT '1z' AS VALUE UNION
SELECT '2' AS VALUE
) AS t ORDER BY
value REGEXP '^-?[0-9\.]+$' AND LENGTH(value) - LENGTH(REPLACE(value, '.', '')) < 2 DESC,
CAST(value AS UNSIGNED), value;
declare @t table(name varchar(50));
insert @t values ('12'); insert @t values ('6');
insert @t values ('Android 2.2'); insert @t values ('Android 2.3'); insert @t values ('BlackBerry');
select name from @t
order by case when isnumeric(name) = 0 then name else '' end,
case when isnumeric(name) = 0 then -1 else cast(name as int) end
case when name REGEXP '^-?[0-9]+$' then '' else name end,
case when name REGEXP '^-?[0-9]+$' then cast(name as signed) else -1 endOREDER BY to_number(regexp_substr(value,'^[0-9]+')),
to_number(regexp_substr(value,'\$[0-9]+')),
value
Сортировка текстового поля как числа и как строки одновременно в MySQL