在我的SQL数据库中,我有VARCHAR的价格但是当我尝试按价格订购时我遇到了问题。 我尝试使用此查询但无法正常工作..!
CAST(price AS DECIMAL) DESC
如果我启动此查询,结果顺序为:
1.123,45
122,00
2.543,21
656,00
etc
答案 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)
)
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');
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