价格,在VARCHAR到DECIMAL

时间:2017-02-10 10:50:59

标签: mysql sql

在我的SQL数据库中,我有VARCHAR的价格但是当我尝试按价格订购时我遇到了问题。 我尝试使用此查询但无法正常工作..!

CAST(price AS DECIMAL) DESC

如果我启动此查询,结果顺序为:

1.123,45
122,00
2.543,21
656,00
etc

6 个答案:

答案 0 :(得分:1)

使用替换创建小数点,然后使用精度和比例...

进行投射
cast(replace(Price, ',', '.') as decimal(9,2))

答案 1 :(得分:0)

你可以使用直接"转换"按顺序

  

ORDER BY convert( [name column], decimal)

答案 2 :(得分:0)

我找到了问题..数字> 999,99公顷的。在英里... 例如: 1.000,00 我已经取代了所有。使用此查询:

UPDATE computers SET prezzo = REPLACE(prezzo, '.', '')

答案 3 :(得分:0)

按照bolow创建一个示例:

创建表

create table table1(
id integer,
price varchar(20)
)

将记录价格插入varchar:

insert into table1 values(1, '10.1');
insert into table1 values(1, '100.1');
insert into table1 values(1, '20.1');
insert into table1 values(1, '200.1');

按照数字字段对varchar价格进行排序:

SELECT * FROM `table1` order by cast(replace(price, ',', '.') as decimal(9,2))

答案 4 :(得分:0)

我认为如果你的逗号是千位分隔符,那么你需要用空字符串替换它们。如果你的逗号是小数分隔符,那么你需要用小数点替换它们。

如果您的逗号是千位分隔符,请尝试此操作:

SELECT
    price
FROM
    prices
ORDER BY
    CAST(REPLACE(price,',','') AS DECIMAL)

这应该给你:

price
543,21
123,45
1,001
6,00
2,00

如果您的逗号是小数分隔符,那么:

SELECT
    price
FROM
    prices
ORDER BY
    CAST(REPLACE(price,',','.') AS DECIMAL)

会给你:

price
543,21
123,45
6,00
2,00
1,001

答案 5 :(得分:0)

检查这个。

select * ,REPLACE( price, ',', '' )  from money
order by CAST(REPLACE(price,',','') AS DECIMAL)

在此处查看演示:Link