Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сортировка текстового значения как целочисленного / 10 сообщений из 10, страница 1 из 1
15.02.2017, 12:47
    #39404796
smn
smn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка текстового значения как целочисленного
Добрый день! Есть таблица с ценами. Тип поля цены - TEXT, надо выводить значения поля от меньшего к большему.
Есть пробел между тысячной и сотой цифрой. До пробела, как видно ниже, сортировка корректная, дальше вразброс.

Вот что получается при запросе
Код: sql
1.
SELECT price, CAST(price AS signed) FROM table ORDER BY CAST(price AS signed)



price CAST (price AS signed)



8 791 8

8 791 8

8 082 8

9 374 9

9 823 9

10 186 10

12 698 12

12 257 12

13 959 13

14 920 14

14 463 14

15 132 15

16 117 16

16 023 16

16 606 16

Просьба пояснить как правильно отсортировать или хотя бы намекнуть. Как вообще обычно в таких случаях делается сортировка? Ведь стоимость зачастую вносится в БД в таком формате (X XXX)
...
Рейтинг: 0 / 0
15.02.2017, 13:00
    #39404822
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка текстового значения как целочисленного
Код: sql
1.
CAST(REPLACE(price,' ','') AS signed)
...
Рейтинг: 0 / 0
15.02.2017, 13:02
    #39404824
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка текстового значения как целочисленного
smnстоимость зачастую вносится в БД в таком формате (X XXX)Вообще-то никогда. Надо отличать значение от его отображения на экране. И то, что значение ХРАНИТСЯ с паразитными пробелами, это более чем нехорошо.
...
Рейтинг: 0 / 0
15.02.2017, 13:02
    #39404826
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка текстового значения как целочисленного
Стоимость хранится в numeric/decimal или int (соответственно в центах/копейках/etc вместо рублей/долларов/евро).
Как она выводится и в каком формате циферки удобнее вносить - задача приложения.
...
Рейтинг: 0 / 0
15.02.2017, 13:20
    #39404849
smn
smn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка текстового значения как целочисленного
авторSELECT CAST(REPLACE(price,' ','') AS signed) FROM table ORDER BY CAST(REPLACE(price,' ','') AS signed)
Тоже выдает только тысячные
...
Рейтинг: 0 / 0
15.02.2017, 13:24
    #39404855
smn
smn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка текстового значения как целочисленного
Akinasmnстоимость зачастую вносится в БД в таком формате (X XXX)Вообще-то никогда. Надо отличать значение от его отображения на экране. И то, что значение ХРАНИТСЯ с паразитными пробелами, это более чем нехорошо.

Тогда вопрос бы и не возник. Выгрузка из 1С происходит в текстовом формате. На этот процесс повлиять не могу, равно как и менять что-то в таблице. Задача стоит только корректно рассортировать при выводе данных.
...
Рейтинг: 0 / 0
15.02.2017, 13:26
    #39404861
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка текстового значения как целочисленного
smn,

Ну уберите пробелы REPLACE-ом.

smnВыгрузка из 1С происходит в текстовом формате. На этот процесс повлиять не могу, равно как и менять что-то в таблице.На выгрузку повлиять не можете, это понятно. Но на загрузку-то в MySQL почему не можете?
...
Рейтинг: 0 / 0
15.02.2017, 13:41
    #39404879
smn
smn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка текстового значения как целочисленного
авторНу уберите пробелы REPLACE-ом.

Я это и пытаюсь сделать, но не могу понять, что не так делаю: как я понял, при значении 9 823 , REPLACE (9 823,' ','') должно выдавать 9823 , а у меня в запросе выводится 9 , т.е. только то, что до пробела.
...
Рейтинг: 0 / 0
15.02.2017, 13:43
    #39404884
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка текстового значения как целочисленного
Akinasmnстоимость зачастую вносится в БД в таком формате (X XXX)Вообще-то никогда. Надо отличать значение от его отображения на экране. И то, что значение ХРАНИТСЯ с паразитными пробелами, это более чем нехорошо.

Вот это и называется "нарушение доменной целостности данных".
Избавляйтесь!
...
Рейтинг: 0 / 0
15.02.2017, 14:08
    #39404915
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка текстового значения как целочисленного
smnкак я понял, при значении 9 823 , REPLACE (9 823,' ','') должно выдавать 9823 , а у меня в запросе выводится 9 , т.е. только то, что до пробела.Да щазз!!! Вот посмотри в теге кода (это кнопка SRC над полем ввода, пользуйся, кстати, ею, а не QUOTE) твой вариант и правильный:

Код: sql
1.
2.
REPLACE (9 823,' ','')
REPLACE('9 823',' ','')
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сортировка текстового значения как целочисленного / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]