ここではドイツで正しい数値形式を取得したいので、ポイントではなく小数点としてカンマを表示する必要があります。しかしこれは...
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
正しく?
まあ、私が知る限り、変換のための文化固有のオプションはありません。
だから、置換を使用してそれを行うことができます(はい、それは少しbitいように見えます...)
select
replace(replace(replace(convert(varchar(30), @euros, 1), ',', '|'), '.', ','), '|', '.')
アイデア:最初にコンマを何かに変更し、次にドットをコンマに変更し、次に「何か」をドットに戻します。
適切なカルチャ情報を提供するために、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
DECLARE @euros money
SET @euros = 1025040.2365
SELECT REPLACE(CONVERT(varchar(30), @euros, 0), '.', ',')
それを行う必要があります(少なくとも1025040,24
)
次のようなreplace
を使用できます。
DECLARE @euros money
SET @euros = 1025040.2365
SELECT REPLACE(REPLACE(CONVERT(varchar(30), @euros, 1),',',''),'.',',');
最初に、千の区切り文字コンマ(、)を長さゼロの文字列( '')に置き換えてから、同じselectステートメントでDecimal( '。')をコンマ( '、')に置き換えることができます。