Целочисленные значения, хранящиеся в полях varchar, дают разные результаты при заказе - PullRequest
1 голос
/ 21 октября 2011

У меня есть ситуация, в которой у меня есть имя столбца c_id, который находится в varchar, но содержит целые или нулевые значения. (Я не могу изменить тип данных, так как он использовался очень долго в моем проекте)

Моя проблема заключается в том, что всякий раз, когда я пытаюсь упорядочить по моей таблице этот столбец, он показывает мне искаженные результаты, и даже когда я ищу максимальное значение, он не дает мне максимальное значение в соответствии с его величиной.

Интересно, хранится ли он внутри формы ASCII, но я не совсем уверен. Пожалуйста, помогите мне знать, почему это происходит.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 21 октября 2011

Попробуйте использовать функцию CAST :

SELECT CAST(c_id AS UNSIGNED INTEGER) id, field1, field2 
FROM your_table
ORDER BY id

или

SELECT 
    CASE 
        WHEN c_id IS NULL THEN 0;
        ELSE CAST(c_id AS UNSIGNED INTEGER);
    END AS id
    , field1, field2 
FROM your_table
ORDER BY id
1 голос
/ 21 октября 2011

Вы можете использовать функцию CAST.Вот некоторый код, чтобы показать вам пример и разницу, которую он имеет в возвращаемых результатах:

mysql> SELECT CAST('19.45' AS DECIMAL(5,2)) as result;

+--------+
| result |
+--------+
| 19.45 |
+--------+

1 row in set (0.04 sec)
...