私はギリシャ語でフォーマットされた数値を含むvarchar列のSQLテーブルを持っています(千の区切り文字として。および小数点の区切り文字としてコンマ)
古典的な変換
CONVERT(numeric(10,2),REPLACE([value],',','.'))
ので機能しません。 (千区切り)変換を強制終了します
例:
CONVERT(numeric(10,2),REPLACE('7.000,45',',','.'))
そのような値をnumeric(10,2)に変換したい
それを処理する方法の提案はありますか?
(SQL Server 2012以降を使用している場合は、@ wBobの answer を参照して、よりクリーンな方法を確認してください。以下の私の回答で概説されている方法は、SQLを使用している場合にのみ必要ですServer 2008 R2以前)
NUMERIC
に変換する場合、コンマ、ピリオド、スペースのいずれであるかに関係なく、千の位の区切り文字は必要ない(または必要ない)ので、最初にそれらを削除してください。次に、コンマをピリオド/デシマルに変換すれば完了です。
SELECT CONVERT(NUMERIC(10, 2),
REPLACE(
REPLACE('7.000,45', '.', ''),
',', '.'
)
) AS [Converted];
戻り値:
7000.45
完全を期すために、私も試したことを述べておかなければなりません。
SET LANGUAGE Greek;
[〜#〜] convert [〜#〜] のさまざまなフォーマットスタイルを調べますが、ここでは何も適用されません。
[〜#〜] format [〜#〜] 関数ですが、入力タイプは数値または日付/時刻/日付時刻値でなければなりません(それはSQL Server 2012で導入されたため、適用されません) SQL Server 2008 R2以前)。
そして、他には何も機能しないようでした。私は2つのREPLACE
呼び出しよりもエレガントなものを見つけたいと思っていましたが、今のところそのような運はありません。
また、言及するだけで、純粋なT-SQLソリューションではありませんが、これはSQLCLRを介して実現することもできます。そして、これを行う事前完了関数がString_TryParseToDecimalという名前の SQL# ライブラリ(私が書いたもの)にあります。この関数は無料バージョンで利用でき、SQL Server 2005以降のすべてのバージョンのSQL Serverで機能します。
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');
戻り値:
7000.45000000000000000000
SQL Serverのどのバージョンを使用していますか? SQL Server 2012以降では、USING culture
引数を指定して TRY_PARSE を使用できます。 [〜#〜] parse [〜#〜] を使用することもできます。変換が失敗した場合、PARSE
の違いは失敗し、TRY_PARSE
NULL
を返します。例:
DECLARE @t TABLE ( x VARCHAR(10) )
INSERT INTO @t
VALUES ( '7.000,45' ), ( 'xxx' )
SELECT x,
TRY_PARSE( x AS NUMERIC(10,2) USING 'El-GR' ) x
FROM @t
HTH
次のコードは私の場合に機能しました:
select convert(varchar,FORMAT(123456789.0258,'###,###,###.00','de-de'))
出力:123.456.789,03