mysql - ORDER BY 货币值

标签 mysql sql-order-by

我的 MySQL 表之一中有一个prize_value 列,现在我需要基于此进行排序。该列实际上是 VARCHAR 并且附加了货币符号。但并非适用于所有值。货币符号可以是 USD(美元符号)、POUND 或 INR(卢比符号)。所以目前 order by 无法正常工作。如何在不手动删除货币符号的情况下解决此问题?

以下是该列中的一些示例值:

.50
£10
£100
$15
$20
£25
£50
10
₹30

最佳答案

您需要两列:

  • 一个代表值,一个可以排序的 float / double (或整数),用于求和等运算。
  • 一个用于其他目的(显示、可能转换等)的货币( ISO 4217 standard 之后的 char(3) )

在 varchar 中同时存储值和符号是没有意义的,特别是因为货币符号的位置因国家/地区而异(可以在开头或结尾),符号和符号之间可能有空格值与否等

话虽这么说,如果你不想改变你的 table ,类似的东西可以工作:

ORDER BY CAST(
  REPLACE(REPLACE(REPLACE(thecolumn,'$',''),'£',''),'₹','')
  AS DECIMAL(10,2)
)

关于mysql - ORDER BY 货币值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32244889/

相关文章:

sql - 如何根据上一行的值对sql结果进行排序?

linq 多顺序降序

c# - 按 'Sector %' 排序对象列表,然后按顺序排列其他所有对象

php - 简单的 Ajax 过滤器不返回结果

mysql - MySQL 中的 UNION ALL 性能不佳

javascript - 在 Promise.All 中释放 MySQL 连接

mysql - 数字列中的 Asc 顺序

mysql - Solr DataImportHandler 外部表

java - 通过 JDBC Driver Manager 运行 mysql 准备好的语句(慢于 10 秒)时,Tomcat 6 没有得到任何响应

MySQL COUNT、GROUP BY 和 ORDER BY