2017-01-21 4 views
0

У меня есть база данных, которую я не могу изменить, которая содержится в таблице1 в поле varchar (255) field1, 32-битное целочисленное значение.sql query integer в строке

Меня интересуют последние десять или такие записи таблицы, из которых целое число меньше заданного значения параметра.

Запуск следующего оператора SQL работает почти:

echo 'select field1 from table1 where field1 < 123456 order by field1;'|mysql 

Проблема заключается в том, что field1 содержит значения, как

123450 
123453 

, который ответит на выбор, но и ценности, как

12344 
12345 

, которые также соответствуют критериям, из-за порядка сортировки и используемого метода (sort wi го строки?).

Проблема, конечно, в недостатке ведущих нулей, которые я не могу вам помочь.

Каков наилучший способ решения этого вопроса в виде чистого sql-запроса? Из-за ограничений по времени в конечном решении я предпочитаю один запрос для каждого параметра.

ответ

1

Вы можете преобразовать значение, рассматривая его как числовое. Вот простой способ:

select field1 
from table1 
where field1 + 0 < 123456 
order by field1 + 0; 

+ 0 делает "тихой преобразование". Если строка не является числом, то она возвращает 0. Преобразование применяется только к ведущим цифрам в строке.

В общем, лучше всего использовать правильный тип. Если поле содержит не числовые значения, вы можете:

where field1 + 0 < 123456 and 
     field1 + 0 > 0 
+0

Будет внешний вид литья работа как 'конвертируйте («тест», CHAR CHARACTER SET utf8); SELECT CAST ('test' AS CHAR CHARACTER SET utf8); ' –

+0

@RanadipDutta. , , Я верю, что вернет ошибку, если строка содержит не-цифры. –

+0

Да, правильно. Но я должен сказать, что тихая конвертация отличная –

Смежные вопросы