回答:
(SQL Server 2012以降を使用している場合は、@ wBobの回答を参照して、よりクリーンな方法を確認してください。以下の私の回答で概説されている方法は、SQL Server 2008 R2以前を使用している場合にのみ必要です。)
に変換するときにNUMERIC
、コンマ、ピリオド、スペースのいずれであるかに関係なく、3 桁ごとの区切り文字は必要ない(または必要ない)ので、最初にそれらを削除してください。次に、コンマをピリオド/デシマルに変換すれば完了です。
SELECT CONVERT(NUMERIC(10, 2),
REPLACE(
REPLACE('7.000,45', '.', ''),
',', '.'
)
) AS [Converted];
戻り値:
7000.45
完全を期すために、私も次のことを試みたことに言及する必要があります。
SET LANGUAGE Greek;
FORMATの機能が、入力タイプは、(そうSQL Server 2008のR2には適用歳以上でないと、それはSQL Serverの2012年に導入されたことを、)数値または日付/時刻/日付時刻値でなければなりません。
そして、他には何も機能していないようでした。私は2つのREPLACE
電話よりもエレガントなものを見つけたいと思っていましたが、今のところ、そのような運はありません。
また、言及するだけで、純粋なT-SQLソリューションではありませんが、これはSQLCLRを介して実現することもできます。そして、SQL_ライブラリー(私が書いたもの)にString_TryParseToDecimalという名前の事前実行済み関数があります。この関数は無料バージョンで利用でき、SQL Server 2005以降のすべてのバージョンのSQL Serverで機能します。
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');
戻り値:
7000.45000000000000000000
SQL Serverのどのバージョンを使用していますか?SQL Server 2012以降では、引数を指定してTRY_PARSEを使用できUSING culture
ます。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
VARCHAR
、NVARCHAR
、CHAR
、およびNCHAR
種類。デフォルトはある場合には30であり、他の場合には1であり、保守不能でエラーが発生しやすいコードになります。2)を使用する場合、正確なレイアウトは必要ありません#
。#
桁区切り記号を除くすべての桁で1つ(例:)、または#,#
すべて桁と桁区切り記号を取得するには、2つをコンマで区切って(例:)必要です。したがって、SELECT CONVERT(VARCHAR(20), FORMAT(123456789.0258, N'#,#.00', N'de'));
あなたが提案しているものと同じ出力を返します。