私のSQLデータベースではVARCHARで価格がありますが、価格で注文しようとすると問題があります。 このクエリを使用しようとしましたが動作しません..!価格は、VARCHARからDECIMALへ
CAST(price AS DECIMAL) DESC
私はこのクエリを起動した場合は、結果の順序は次のとおりです。
1.123,45
122,00
2.543,21
656,00
etc
私のSQLデータベースではVARCHARで価格がありますが、価格で注文しようとすると問題があります。 このクエリを使用しようとしましたが動作しません..!価格は、VARCHARからDECIMALへ
CAST(price AS DECIMAL) DESC
私はこのクエリを起動した場合は、結果の順序は次のとおりです。
1.123,45
122,00
2.543,21
656,00
etc
使用
cast(replace(Price, ',', '.') as decimal(9,2))
私には良く見えません。変更の対象となる小数点記号には、常にカンマを使用する書き込みプロセスが必要です。また、数字にさらに1000個の区切り文字が含まれている場合はどうすればよいでしょうか?次に、データベース設定に依存して小数点区切り文字を変更することがあります。私は、値が書かれている値とそのように知られている完全な形式(つまり、いくつかのアプリやビジネス層)をソートしたり、代わりに番号を格納することが最善のアドバイスだと思っています。 –
@ThorstenKettnerもちろん、数値を数値として格納するのが最も賢明な解決策です。私は何千ものセパレータを考慮していなかった。 – JohnHC
そのまま直接 "変換"を使用できます。
ORDER BY convert([name column], decimal)
私はこの問題を見つけました。数字は999,99ヘクタールです。 例: 1.000,00 すべてを交換しました。このクエリで:
UPDATE computers SET prezzo = REPLACE(prezzo, '.', '')
文字列の書式を自由に変更できるのであれば、そのデータ型を変更できないのはなぜですか?これは解決策になりますが、あなたが示していることは回避策以上のものではありません。 –
bolowごとに一つの例を作成します。 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');
create table table1(
id integer,
price varchar(20)
)
SELECT * FROM `table1` order by cast(replace(price, ',', '.') as decimal(9,2))
あなたのカンマが千単位の区切り文字である場合、空の文字列で置き換える必要があると思います。カンマが小数点区切り文字の場合、小数点に置き換える必要があります。
あなたのカンマが桁区切りある場合は、これを試してみてください:
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
これをチェックしてください。ここで
select * ,REPLACE(price, ',', '') from money
order by CAST(REPLACE(price,',','') AS DECIMAL)
チェックデモ:Link
あなたは、あなたがこの問題を持っていることは決してないだろう、と開始するには、正しいデータ型を使用する必要があります。 "動作しません"は問題の説明ではありません。それはエラーを投げますか?もしそうなら、エラーは何ですか?予期しない結果が出ていますか?もしそうなら、あなたは何を期待していますか? – HoneyBadger
データベースに数値をvarcharとして格納する場合、これは通常、列に表示用にフォーマットされた文字列が含まれているためです。データベースはその内容に気づかず、その計算を何もしないことになっています。データベースで計算するために何か必要な場合は、代わりに数値を格納します。 –
おそらく、小数点が10進数の代わりに期待されます。 – jarlh