我有一个表,其中的字段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/