从后面到值前面切换负号

时间:2017-03-28 14:40:55

标签: sql sql-server

我的SQL表中有5个字段,当前是VARCHAR个字段。这些字段中的数据是金额,但负值在数字的末尾有符号,而不是前面。

示例:4.56 -

如何将这些字段从VARCHAR更改为MONEY并将否定号转换为流程中值的前面?

我试过CAST([FIELD_NAME] AS MONEY)但是没有用。我从这次尝试中得到了以下错误:

  

无法将char值转换为money。 char值不正确   语法。

3 个答案:

答案 0 :(得分:5)

检测减号;去掉它;把积极的结果投给了MONEY;否定它。

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

答案 1 :(得分:3)

Declare @S varchar(25) = '4.59-'

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

答案 2 :(得分: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))