2012-04-30 10 views
1

У меня есть столбец с именем D1_VALMySQL Сравнить VARCHAR столбцы

Строки в этой колонке есть данные, которые выглядят так:

C:10 
R:200 
E:3 
N:77 

Я пытаюсь сделать поиск по этим значениям с логическим оператор. Я пробовал:

SELECT * FROM d1 WHERE CAST(`D1_VAL` AS UNSIGNED) > 5 

Он не возвращает никаких строк. Я также пробовал:

SELECT * FROM d1 WHERE (0 + `D1_VAL`) > 5 

Как бы это сделать правильно?

+1

Всегда ли это один символ плюс двоеточие в начале каждой строки или он может меняться? – zerkms

+0

@zerkms Это всегда один символ + двоеточие. – Norse

+2

. Вы получите гораздо более эффективный поиск, если разделите его на два столбца, а затем обработайте второй столбец как правильный цельный типизированный столбец. – Corbin

ответ

5

Этот запрос будет делать,

SELECT * FROM d1 WHERE CAST(SUBSTRING(`D1_VAL`, 3) AS UNSIGNED) > 5 

Но лучше, чтобы нормализовать значения, как C:10 в две отдельные колонки.

1

Какое сравнение вы пытаетесь сделать?

Если сравнить количество (на RIGH в толстой кишке) против 5, попробовать что-то вроде этого:

CAST(SUBSTRING(`D1_VAL`, INSTR(`D1_VAL`, `:`)) AS UNSIGNED) > 5 

Для получения более подробной информации о строковых функциях см here.

Кроме того, я хотел бы предложить подумать о дизайне базы данных - то есть будет ли содержимое этого столбца лучше хранить в двух столбцах - например, char и целое число? Это было бы более эффективно - требовалось меньше места на диске и позволяло бы выполнять более быстрые запросы. Если у вас много строк, выполнение различных строковых функций, кастинг и т. Д., Вы можете делать ваши запросы довольно медленно.

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