繁体   English   中英

MySQL比较VARCHAR列

[英]MySQL Compare VARCHAR Columns

我有一列名为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

我该如何正确处理?

这个查询会做,

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

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

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

您要进行的比较是什么?

如果将数字(从冒号到冒号)与5进行比较,请尝试以下操作:

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

有关字符串函数的更多信息,请参见此处

另外,我建议您考虑一下数据库的设计-即,将该列的内容存储在两列中(例如,一个char和一个整数)会更好吗? 这样会更有效率-需要更少的磁盘空间并允许更快的查询。 如果您有很多行,那么执行各种字符串函数,强制转换等操作可能会使查询运行得很慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM