MySQL比较VARCHAR列

时间:2012-04-30 09:04:09

标签: mysql casting varchar

我有一个名为D1_VAL

的列

此列中的行包含如下所示的数据:

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

我该如何正确地做到这一点?

2 个答案:

答案 0 :(得分:5)

此查询将执行,

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

但最好将C:10等值标准化为两个单独的列。

create table d1(
    letter char(1),
    number int,
    // ... other columns
)

答案 1 :(得分:1)

您要做的比较是什么?

如果将数字(在righ与冒号上)与5进行比较,请尝试以下方法:

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

有关字符串函数的更多信息,请参阅here

另外,我建议考虑一下数据库的设计 - 即本栏目的内容最好是存储在两列中 - 例如一个字符和一个整数?这样会更有效 - 需要更少的磁盘空间并允许更快的查询。如果你有很多行,做各种字符串函数,转换等可能会使你的查询运行得很慢。