2012-04-04 2 views
0

У меня есть таблица под названием Buttons. В таблице кнопок есть столбец button_number. В таблице содержится более 100 записей. Теперь я должен выбрать номер кнопок от 10 до 50. Когда я использовал этот следующий запрос, он не возвращает нулевую строку.sql где условие для int, но тип столбца - Varchar

select * from Buttons where button_number >= '10' and button_number <='50' 

В чем проблема в запросе. Если я использую один и тот же запрос с другим столбцом (тип данных - int), тогда он работает нормально. Является ли проблема из-за типа данных столбца? Если да, то в чем проблема?

Примечание: тип данных столбца тип_копии - Varchar.

+0

Какой тип базы данных вы используете? Добавьте правильный тег для своей БД. – barsju

+0

Если вы помечаете код путем отступов на 4 пробела (или нажав кнопку '{}'), вы получите правильную подсветку синтаксиса. Гораздо лучше, чем просто сделать это смелым. –

+0

Да, я знал .. Но забыл сделать это .. Спасибо за ваше обновление .. – Arung

ответ

4

Button_number является varchar, и вы пытаетесь выполнить сравнение по целочисленному стилю. Вам нужно будет указать столбец button_number в целое число.

select * from Buttons where 
    convert(integer, button_number) >= 10 and convert(integer, button_number) <= 50 

Редактировать

Этот запрос требует сканирования таблицы, так как это необходимо преобразовать каждый button_number в целое число перед применением где положение. Это не проблема для 100 строк, но это проблемы для больших чисел.

Как упоминалось в ответе Микаэла Эрикссона, лучшей альтернативой было бы изменить тип button_number на целочисленный тип (если это возможно). Это будет иметь ряд преимуществ:

  • Там не будет никаких шансов на входе не целое значение в столбце
  • Затем вы сможете применить целочисленный индекс для столбца. Это значительно повысило бы скорость вашего запроса, если таблица содержит большое количество строк.
2

Если да, то в чем проблема?

Другие ответы говорят о том, чтобы передать колонку в int в запросе. Это будет работать для вас, если у вас есть целые числа в столбце. Если это так, вы должны изменить тип данных для столбца button_number на int, так что вы не рискуете иметь там значение символа, которое нарушит ваш запрос.

0

изменить ваш запрос как ниже

select * from Buttons where cast(button_number as int) >= 10 and cast(button_number as int) <=50 

, но убедитесь, что все значения столбца «button_number» не имеют какой-либо charcters

0

В зависимости от типа DB и версии, но в MySQL вы могли бы необходимо использовать SIGNED или UNSIGNED в качестве вашего типа данных:

SELECT * FROM Buttons 
WHERE CONVERT(SIGNED, button_number) >= 10 
AND CONVERT(SIGNED, button_number) <= 50 
Смежные вопросы