Строка сортировки mysql с размерами и кавычками - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь отсортировать поле, содержащее буквы, цифры и кавычки, но не могу получить результаты по порядку.Поле (именованное имя) в таблице содержит данные, подобные этим, но не упорядоченные, как показано:

    6"w x 9"h 
    6"w x 10"h 
    7"w x 8"h 
    7"w x 9"h 
    7"w x 10"h 
    7"w x 21"h 
    10"w x 10"h

Используемая мной команда:

    select name from my_table order by name;

Результат -

    10"w x 10"h
    6"w x 10"h
    6"w x 9"h 
    7"w x 10"h
    7"w x 21"h
    7"w x 8"h 
    7"w x 9"h  

Я перепробовал все, что нашел на этом сайте.Я не мог заставить работать последний, но другие работали немного лучше, чем выше, но все еще не правильно.

    order by name * 1

    order by name + 0

    order by CAST(name AS DECIMAL(10,2))

    order by length(name), name

    order by  CAST(SUBSTR(name, 0, LOCATE('w', name) - 1) AS int),
    CAST(SUBSTR(name FROM (LOCATE('h', name) - 1)) AS int)

Первые две вышеупомянутые альтернативы дали этот вывод, так что они почти делают это.

    6"w x 9"h 
    6"w x 10"h 
    7"w x 10"h 
    7"w x 21"h 
    7"w x 9"h 
    7"w x 8"h 
    10"w x 10"h 

Кто-нибудь знает, как их отсортировать, чтобы они были в правильном порядке, как показано ниже.

    6"w x 9"h 
    6"w x 10"h 
    7"w x 8"h 
    7"w x 9"h 
    7"w x 10"h 
    7"w x 21"h 
    10"w x 10"h 

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Последний находится в правильном направлении.Вам необходимо заказать по номеру в строке:

ORDER BY CAST(SUBSTR(name, 1, LOCATE('"w', name) - 1) AS signed),
    CAST(SUBSTR(name, LOCATE('x', name) + 1, LOCATE('"h', name) - LOCATE('x', name) -1) AS signed)
0 голосов
/ 12 апреля 2019

В MySQL 8.x вы можете использовать функцию REGEXP_SUBSTR() для извлечения сложных выражений переменной длины:

select dimension 
from (
  select
    dimension
    cast(regexp_substr(dimension, '[0-9]+') as int) as w,
    cast(substr(regexp_substr(dimension, 'x +[0-9]+'), 3, 10) as int) as h
  from t
)
order by w, h
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...