2017-03-28 22 views
2

私のSQLテーブルには、現在VARCHARフィールドの5つのフィールドがあります。これらのフィールドのデータは金額ですが、負の値は正面ではなく数字の最後に符号が付いています。負の記号を先頭から先頭に移動

:4.56-

私は MONEYVARCHARからこれらのフィールドを変更し、プロセス内の値の前に負の符号を切り替えることができますどのように

私はCAST([FIELD_NAME] AS MONEY)を試しましたが、それは機能しませんでした。この試行で次のエラーが発生しました。

char値をmoneyに変換できません。 char値が正しくない 構文です。

答えて

4

を。それを除く;肯定的な結果をMONEYにキャストします。否定します。

CASE WHEN [FIELD_NAME] LIKE '%-' 
    THEN -(cast(replace([FIELD_NAME],'-','') AS money)) 
    ELSE cast([FIELD_NAME] AS money) 
    END 
+1

個人的に私はより多くの明示的なを好むだろう「-1 *」の代わりに - 簡単に気付かれない可能性があります。しかし、これは問題なく動作します。 –

2

はこのような何か試してみてください:マイナス記号を検出

DECLARE @FIELD_NAME VARCHAR(MAX) = '4.56-' 

SELECT IIF(RIGHT(@FIELD_NAME, 1) = '-', 
      -1 * CAST(LEFT(@FIELD_NAME, LEN(@FIELD_NAME)-1) AS MONEY), 
      CAST(@FIELD_NAME AS MONEY)) 
3
Declare @S varchar(25) = '4.59-' 

Select try_convert(money,iif(charindex('-',@s)>0,'-','')+replace(@S,'-','')) 
+0

マイナス記号*を変換後に追加することは考えていませんでした。私はそれが好きです。 –

+0

@RossPresserあなたの答えよりも優れているわけではありません。それはちょうど私のトカゲの脳が私をもたらしたところです:) –

関連する問題