在MySQL中订购之前有没有办法修改列?

时间:2010-03-19 23:59:04

标签: mysql string currency

我的表格中包含value字段varchar(255)。该领域的内容可以多种多样:

  • $1.20
  • $2994
  • $56 + tax(如果需要,可以忽略或截断此$56

我构建了一个查询:

SELECT value FROM unnamed_table ORDER BY value

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

有没有办法真正按价值订购,而不用将字段类型更改为DECIMAL或其他?换句话说,在结果排序之前,可以动态修改value字段('$',将值转换为十进制)吗?

2 个答案:

答案 0 :(得分:1)

创建没有$ -sign的第二列,对该列进行排序,并使用应用程序中原始列的数据。

为了创建帮助列并对其进行排序,您需要这样的东西:

SELECT value, CAST(SUBSTR(value, 2) AS UNSIGNED) sort_col
  FROM unnamed_table ORDER BY sort_col

答案 1 :(得分:1)

您可以对用于将文本“解析”为十进制

的表达式进行排序
SELECT value FROM unnamed_table ORDER BY expression_returning_decimal(value)

你的表达式使用MySQL函数从字符串中提取数字取决于你期望它采用什么形式(类似于CAST(值AS DECIMAL(10,2)),但你可能需要处理多余的非数字字符,因为我不确定如果不剥离它们会给CAST带来什么。)