我需要对包含正数和负数的列运行多个查询,并返回所有 <
的行或 >
比选定的值,但是如果选定的值是负数,当我使用“大于”运算符时它不会返回预期的结果。
请注意,当所选值为负数时,它应该同时返回正数和负数,并且似乎从结果中排除了负数。
SELECT T3.*
FROM Rules T3
WHERE T3.Width > '-.80';
T3.Width 中包含的值是:
0.90,(0.70),(0.70),(0.70),(0.70),(1.00),(1.00),(1.00),(1.00),(0.90),(0.55),(0.50)
因此结果应该是:
0.90,(0.70),(0.70),(0.70),(0.70),(0.55),(0.50)
但是返回的结果是:
0.90
最佳答案
最简单的解决方案当然是使用 DECIMAL()
或 FLOAT
表中的列。
由于您正在使用 VARCHAR()
类型并喜欢继续使用 VARCHAR
, RDBMS 没有正确处理 ()
将封闭的值作为负数,而不是尝试将字符串转换为整数(这会导致零和不正确的比较)。
围绕 ()
工作封闭底片:
使用 ()
- 封闭的负值,你可以REPLACE()
开幕(
用-
和 REPLACE()
闭幕)
什么都没有,导致像 -0.70
这样的值, 但对于 MySQL 来说它仍然是一个字符串。然后你必须 CAST
it to a decimal value对于 < >
比较。
SELECT Width
FROM T3
WHERE
/* Replace the ( to -, and the ) with nothing
* then cast it to a decimal value
*/
CAST(REPLACE(REPLACE(Width, '(', '-'), ')', '') AS DECIMAL(10,2)) > '-0.8'
在 VARCHAR 列中使用常规负值
如果将它们更改为常规负数但保留 VARCHAR
类型,您不需要所有嵌套的 REPLACE()
但您仍然需要将其转换为 DECIMAL(10,2)
.
SELECT Width
FROM T3
WHERE
CAST(Width AS DECIMAL(10,2)) > '-0.8'
关于mysql - 使用带负数的 'Greater than' 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28934515/