我的数据库中有一个名为“price”的字段,它设置为varchar。它包含美元符号以及逗号。
我的数据库中的值是这样的:
$ 100,000
$六十二万五千〇五
$一十一万五千九百九十零
$ 2,450,000
$一十三万七千○五
我希望它能像这样订购:
$ 100,000
$一十一万五千九百九十零
$一十三万七千○五
$六十二万五千〇五
$ 2,450,000
我尝试了ORDER BY 0 +价格和ORDER BY ABS(价格),但他们只是按照它在数据库中的顺序输出。无论如何要在保持字段varchar
的同时订购它答案 0 :(得分:9)
如果可能,请更改数据库以在int
,float
或decimal
字段中保留这些值,具体取决于您需要多少精度。输出值时添加$
和所有其他格式。
其他所有内容只是围绕错误的数据库结构进行管道录制。这并非不可能,但是当绝对没有办法改变数据库时,它应该是最后的手段。
答案 1 :(得分:2)
完全同意上述有关数据库设计的帖子,无论如何都有不好的方法:
SELECT REPLACE(REPLACE(price,',',''),'$','') as cleanPrice FROM Table ORDER BY cleanPrice
查询必须在每一行上进行替换,因此可能会变得很慢..
答案 2 :(得分:1)
老实说,当你把它们带出数据库时,你应该把这些存储为int并在PHP中格式化,这样就可以更容易地处理数据,你可以将它们作为INT来操作。
当你把它们拉出来时,你可以使用numeric_format自动添加逗号,然后只需添加价格的$ $。
如果您要存储多种类型的价格,您也可以在货币类型中存储货币类型;在这种情况下,这将是美元。
答案 3 :(得分:1)
我在Oracle中很快就这样做了,所以它在MySQL中可能不起作用......如果没有,我很抱歉。我只选择价格
select price
from table
order by (cast(substr(replace( replace('price', ',', ''), '"', '' ), 2, length(replace( replace('price', ',', ''), '"', '' ))-1) as int)
答案 4 :(得分:1)