在一个表中,varchar中有两列“art”和“price”。“价格”的格式为货币。要找到我所用物品的最高价格:
SELECT art, price FROM books WHERE price = (SELECT MAX(CAST(REPLACE(REPLACE(price, ',', ''),'.','') AS INT)) FROM books)
这行不通。拜托,怎么了?
6ljaweal1#
你需要把价格和价格比较一下。因此,一种方法是:
SELECT b.art, b.price FROM books b WHERE b2.price = (SELECT b2.price FROM books b2 ORDER BY REPLACE(REPLACE(b2.price, ',', ''), '.', '') + 0 DESC LIMIT 1 );
您应该将值存储为 decimal / numeric 类型 . 表示有小数部分。我不建议删除它,因此:
decimal
numeric
.
WHERE b2.price = (SELECT b2.price FROM books b2 ORDER BY REPLACE(b2.price, ',', '') + 0 DESC LIMIT 1 );
这将显式转换替换为隐式转换——因为mysql对具有 CAST .最后,也可以使用窗口函数来处理:
CAST
select b.* from (select b.*, rank() over (order by REPLACE(b2.price, ',', '') + 0 desc) as seqnum from books b ) b where seqnum = 1
bvhaajcl2#
当您强制转换为整数时,请使用 SIGNED 或者 UNSIGNED 作为目标。
SIGNED
UNSIGNED
SELECT art, price FROM books WHERE price = (SELECT MAX(CAST(REPLACE(REPLACE(price, ',', ''),'.','') AS SIGNED)) FROM books)
应该将数值存储为数字而不是字符串。
2条答案
按热度按时间6ljaweal1#
你需要把价格和价格比较一下。因此,一种方法是:
您应该将值存储为
decimal
/numeric
类型.
表示有小数部分。我不建议删除它,因此:这将显式转换替换为隐式转换——因为mysql对具有
CAST
.最后,也可以使用窗口函数来处理:
bvhaajcl2#
当您强制转换为整数时,请使用
SIGNED
或者UNSIGNED
作为目标。应该将数值存储为数字而不是字符串。