mysql - 在 MySQL 中,有没有办法在对列进行排序之前对其进行修改?

标签 mysql string currency

我有一个表,其中的字段value是一个varchar(255)。该字段的内容可以多种多样:

  • 1.20 美元
  • $2994
  • $56 + 税(如有必要,可以忽略或截断为 $56)

我构建了一个查询:

SELECT value FROM unnamed_table ORDER BY value

但是,这当然使用 ASCII 字符串比较来对结果进行排序,并且不使用任何数字类型的比较。

有没有一种方法可以真正按值排序而无需将字段类型更改为DECIMAL或其他类型?换句话说,可以在结果排序之前动态修改 value 字段(删除“$”,将值转换为十进制)吗?

最佳答案

您可以对将文本“解析”为十进制的表达式进行排序

SELECT value FROM unnamed_table ORDER BY expression_returning_decimal(value)

您的表达式使用 MySQL 函数从字符串中提取数字,具体取决于您期望它采用的形式(类似于 CAST(value AS DECIMAL(10,2)),但您可能需要处理无关的非数字字符不知何故,因为我不确定如果不删除它们 CAST 会给出什么)。

关于mysql - 在 MySQL 中,有没有办法在对列进行排序之前对其进行修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2481259/

相关文章:

mysql - 给定一个用户,选择具有最常见评分的用户

javascript - 如何根据子字符串数组上的字符串匹配查找 Mongoose 文档

java - 通过添加 '.' 、 ',' 、修剪(不四舍五入)使双倍可读,因此只有最后 2 位数字可能?

php - 如何更新图像?

使用 Spring + Hibernate 创建 MySQL 表

python - 为什么 python2 显示\r(原始转义)而 python3 不显示?

java - 从字符串的一个实例打印到另一个实例

java - 格式化带前导符号的数字

node.js - 我应该如何在 Mongoose 中存储价格?

mysql - 使用 Sean lahman MLB 数据库了解 mysql 查询性能