mysql varchar sort - PullRequest
       13

mysql varchar sort

2 голосов
/ 23 января 2012

У меня есть строка VARCHAR со значениями, такими как: «1, 11, 2, 6, 2A, 10, 6B». Как выбрать их, упорядоченные как: 1, 2, 2A, 6, 6B, 10, 11?

Пробовал простой запрос SQL, но это не сработало.

SELECT * FROM clients ORDER BY id

Ответы [ 3 ]

3 голосов
/ 23 января 2012

Вы можете использовать CONVERT.

Это будет отсортировать сначала по номеру, а затем по букве (в противном случае вы не будете иметь 1, 1A, 1B и т. Д.)

SELECT id FROM clients ORDER BY CONVERT(id, UNSIGNED), id
2 голосов
/ 23 января 2012

Чтобы позаимствовать из предыдущих ответов, приведение или преобразование столбца в числовое выражение в предложении ORDER является распространенным решением для упорядочения значений в символьном поле численно.

Частичное решение

SELECT * FROM clients ORDER BY CAST(`id` AS DECIMAL)

Однако это решение чаще всего реализуется для строго числовых значений. Поскольку ваши значения представляют собой смесь числа, за которым следует буква, этого решения недостаточно. Если у вас есть значения, в которых начальная десятичная часть идентична, например 2, 2A и 2B, они могут отображаться в любом порядке.

Полное решение

Таким образом, после того, как значения упорядочены по номерам, их следует упорядочить по стандартному (лексикографическому) порядку:

SELECT * FROM clients ORDER BY CAST(`id` AS DECIMAL), id
2 голосов
/ 23 января 2012

То, что вы ищете, это CAST.

CAST(expr AS type)

Ваш SQL-запрос должен выглядеть следующим образом:

SELECT * FROM clients ORDER BY CAST(`id` AS DECIMAL), id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...