我的SQL表中有5个字段,当前是VARCHAR
个字段。这些字段中的数据是金额,但负值在数字的末尾有符号,而不是前面。
示例:4.56 -
如何将这些字段从VARCHAR
更改为MONEY
并将否定号转换为流程中值的前面?
我试过CAST([FIELD_NAME] AS MONEY)
但是没有用。我从这次尝试中得到了以下错误:
无法将char值转换为money。 char值不正确 语法。
答案 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))