Sql 将负号从值的后面切换到前面
我的SQL表中有5个字段当前是Sql 将负号从值的后面切换到前面,sql,sql-server,Sql,Sql Server,我的SQL表中有5个字段当前是VARCHAR字段。这些字段中的数据是金额,但负值的符号位于数字的末尾,而不是前面 示例:4.56- 如何将这些字段从VARCHAR更改为MONEY,并在过程中将负号切换到值的前面 我试过CAST([FIELD\u NAME]AS MONEY),但没有成功。我从这次尝试中得到了以下错误: 无法将字符值转换为货币。char值不正确 语法 试着这样做: DECLARE @FIELD_NAME VARCHAR(MAX) = '4.56-' SELECT IIF(RIGH
VARCHAR
字段。这些字段中的数据是金额,但负值的符号位于数字的末尾,而不是前面
示例:4.56-
如何将这些字段从VARCHAR
更改为MONEY
,并在过程中将负号切换到值的前面
我试过CAST([FIELD\u NAME]AS MONEY)
,但没有成功。我从这次尝试中得到了以下错误:
无法将字符值转换为货币。char值不正确
语法
试着这样做:
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))
检测减号;移除它;把积极成果转化为金钱;并否定它
CASE WHEN [FIELD_NAME] LIKE '%-'
THEN -(cast(replace([FIELD_NAME],'-','') AS money))
ELSE cast([FIELD_NAME] AS money)
END
就我个人而言,我更喜欢一个更明确的“-1*”而不是-这很容易被忽视。但无论如何,这应该是可行的。我没有想到在转换中加上负号。“我喜欢它,”罗斯普雷斯特说,没有比你的回答更好的了。这正是我蜥蜴脑带给我的:)
Declare @S varchar(25) = '4.59-'
Select try_convert(money,iif(charindex('-',@s)>0,'-','')+replace(@S,'-',''))