Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将负号从值的后面切换到前面_Sql_Sql Server - Fatal编程技术网

Sql 将负号从值的后面切换到前面

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

我的SQL表中有5个字段当前是
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,'-',''))