MySQL CAST и ASC / DESC - PullRequest
       22

MySQL CAST и ASC / DESC

0 голосов
/ 19 февраля 2012

У меня есть mysql_query

SELECT * FROM table ORDER BY CAST(row AS DECIMAL)

и хотите изменить направление сортировки. Я пробовал ASC и DESC , но оба возвращают одно и то же направление сортировки.

Как мне прибегнуть к ней?

Спасибо, привет

Julian

Ответы [ 3 ]

1 голос
/ 19 февраля 2012

Полагаю, вы могли бы выполнить кастинг в SELECT и ЗАКАЗАТЬ по этому новому столбцу. Недостатком является то, что вы получите 1 дополнительный столбец в своем ответе, но если этот дополнительный столбец ни на что не влияет, то все хорошо.

SELECT *, CAST(row AS DECIMAL(5,2)) AS tempCol FROM table ORDER BY tempCol

Кроме того, ваш DECIMAL должен в идеале указывать его точность. =)

Подробнее на http://dev.mysql.com/doc/refman/5.0/en/fixed-point-types.html

1 голос
/ 19 февраля 2012

Если в вашем столбце row есть только один символ _ внутри, с частью до алфавитного и с частью после числового, это будет работать:

SELECT 
      *
    , SUBSTRING_INDEX(row, '_', 1) AS  FirstPart
    , CAST(SUBSTRING_INDEX(row, '_', -1) AS UNSIGNED) AS SecondPart
FROM 
      TableX
ORDER BY
      FirstPart
    , SecondPart 
1 голос
/ 19 февраля 2012

Это должно работать. Вы пытались показать то, что производит ваш CAST (строка AS DECIMAL)?

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

Какую версию mysql вы используете? Может быть, причина в этом (из справки mysql):

Изменение формата хранения также означает, что столбцы DECIMAL больше не используются. поддерживать нестандартное расширение, допустимые значения которого превышают диапазон, подразумеваемый определением столбца.

...