Есть ли способ изменить столбец, прежде чем он будет упорядочен в MySQL? - PullRequest
0 голосов
/ 20 марта 2010

У меня есть таблица с полем value, которое является varchar(255). Содержимое поля может быть довольно разнообразным:

  • $1.20
  • $2994
  • $56 + tax (Этот можно игнорировать или урезать до $56 при необходимости)

У меня построен запрос:

SELECT value FROM unnamed_table ORDER BY value

Однако , это, конечно, использует сравнение строк ASCII для упорядочивания результатов и не использует числовой тип сравнения.

Есть ли способ действительно упорядочить по значению без изменения типа поля на DECIMAL или что-то еще? Другими словами, можно ли изменить поле value (удалить «$», преобразовать значение в десятичную форму) на лету до сортировки результатов?

Ответы [ 2 ]

1 голос
/ 20 марта 2010

Вы можете отсортировать выражения, сделанные для "разбора" текста на десятичные

SELECT value FROM unnamed_table ORDER BY expression_returning_decimal(value)

Где ваше выражение использует функции MySQL для извлечения числа из строки в зависимости от того, какую форму вы ожидаете принять (что-то вроде CAST (значение AS DECIMAL (10,2)), но вам, вероятно, придется иметь дело с посторонние нечисловые символы как-то, так как я не уверен, что даст CAST, если вы не удалите их).

1 голос
/ 20 марта 2010

Создайте второй столбец без знака $, сортируйте по нему и используйте данные исходного столбца в вашем приложении.

Чтобы создать вспомогательный столбец и отсортировать по нему, вам потребуетсякак это:

SELECT value, CAST(SUBSTR(value, 2) AS UNSIGNED) sort_col
  FROM unnamed_table ORDER BY sort_col
...