web-dev-qa-db-ja.com

小数点としてポイントの代わりにコンマを表示

ここではドイツで正しい数値形式を取得したいので、ポイントではなく小数点としてカンマを表示する必要があります。しかしこれは...

DECLARE @euros money
SET @euros = 1025040.2365
SELECT CONVERT(varchar(30), @euros, 1)

ディスプレイ1,025,040.24 の代わりに 1.025.040,24(または1025040,24)。 C#では、適切なCultureInfoを提供するのは簡単ですが、T-SQLでそれを行う方法は?

本当にREPLACEを使用する必要がありますか?しかし、たとえ1,025,040.24正しく?

7
Tim Schmelter

まあ、私が知る限り、変換のための文化固有のオプションはありません。

だから、置換を使用してそれを行うことができます(はい、それは少しbitいように見えます...)

select 
    replace(replace(replace(convert(varchar(30), @euros, 1), ',', '|'), '.', ','), '|', '.')

アイデア:最初にコンマを何かに変更し、次にドットをコンマに変更し、次に「何か」をドットに戻します。

15
Andy Korneyev

適切なカルチャ情報を提供するために、SQL 2012にはFORMAT()関数があります。以下に例を示します。

declare @f float = 123456.789;

select
  [raw]      = str(@f,20,3)
 ,[standard] = cast(format(@f, 'N', 'en-US') as varchar(20))
 ,[European] = cast(format(@f, 'N', 'de-de') as varchar(20))

戻り値

raw                  |standard   |European   |
---------------------|-----------|-----------|
          123456.789 |123,456.79 |123.456,79 |

2番目のパラメーターで、.NETの場合と同じルールを使用してカスタム形式の文字列を指定することもできます。

ドキュメント: https://msdn.Microsoft.com/en-US/library/hh213505.aspx

9
Phate01
DECLARE @euros money
SET @euros = 1025040.2365
SELECT REPLACE(CONVERT(varchar(30), @euros, 0), '.', ',')

それを行う必要があります(少なくとも1025040,24

3

次のようなreplaceを使用できます。

DECLARE @euros money 
SET @euros = 1025040.2365

SELECT REPLACE(REPLACE(CONVERT(varchar(30), @euros, 1),',',''),'.',',');

SQL Fiddle Demo

0
FutbolFan

最初に、千の区切り文字コンマ(、)を長さゼロの文字列( '')に置き換えてから、同じselectステートメントでDecimal( '。')をコンマ( '、')に置き換えることができます。

0
PankajExplorer