我的表格中包含value
字段varchar(255)
。该领域的内容可以多种多样:
$1.20
$2994
$56 + tax
(如果需要,可以忽略或截断此$56
)我构建了一个查询:
SELECT value FROM unnamed_table ORDER BY value
然而,这当然使用ASCII字符串比较来对结果进行排序,并且不使用任何数字类型的比较。
有没有办法真正按价值订购,而不用将字段类型更改为DECIMAL
或其他?换句话说,在结果排序之前,可以动态修改value
字段('$
',将值转换为十进制)吗?
答案 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带来什么。)