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