我想在sql server 2008表中插入一个值。
值类似于20.00-
,10.00-
减号位于值的末尾。
我怎样才能做到这一点?
答案 0 :(得分:0)
如何使用这样的东西?
SELECT REPLACE(CAST(-456.00 AS VARCHAR(10)),'-','') + '-'
其中456.00是你的价值
答案 1 :(得分:0)
您可以先将原始数据插入临时表。然后,您可以转换临时表中的值,然后将它们插入到实际表中,或者同时插入和转换。
以下是您如何进行转换。
对于每个输入值,您需要检查它是否有减号。如果是,则应在最后位置删除一个字符,并在第一个位置插入一个字符。否则,不应删除或插入任何内容。
因此,基本上您可以以1或0的形式指示并使用该数字来确定要插入或删除的字符数。
有多种获得1/0结果的方法。
例如,您可以将输入值的最后一个字符作为子字符串,并使用CHARINDEX在该子字符串中搜索-
:
CHARINDEX('-', LEFT(InputValue, LEN(InputValue)))
如果InputValue
的最后一个字符 '-'
,CHARINDEX
将返回1,否则返回0.
使用CHARINDEX
的另一种方法是这样的:
CAST(CHARINDEX('-', InputValue) AS bit)
如果InputValue
有减号,CHARINDEX
会返回正结果而CAST
会将其转换为1.如果没有减号,CHARINDEX
会给你一个0,在演员阵容后将保持0。
现在您可以使用表达式的结果来确定:
是否删除最后一个字符:
STUFF(InputValue, LEN(InputValue), CAST(CHARINDEX('-', InputValue) AS bit), '')
和
是否在值前加'-'
:
REPLICATE('-', CAST(CHARINDEX('-', InputValue) AS bit))
也就是说,完整的表达式是:
REPLICATE('-', CAST(CHARINDEX('-', InputValue) AS bit)) +
STUFF(InputValue, LEN(InputValue), CAST(CHARINDEX('-', InputValue) AS bit), '')
在最后的陈述中,您还可以使用CROSS APPLY
来避免重复强调的子表达式,这与此相关(假设您将选择进行插入+处理):
INSERT INTO dbo.TargetTable (columns)
SELECT
...
REPLICATE('-', x.HasMinus) + STUFF(InputValue, LEN(InputValue), x.HasMinus, ''),
...
FROM dbo.StagingTable
CROSS APPLY (SELECT CAST(CHARINDEX('-', InputValue) AS bit)) AS x (HasMinus)
;
答案 2 :(得分:0)
很长但是:
option
答案 3 :(得分:-1)
简单地说:
Select CASE WHEN LEFT(InputValue,1) = '-' THEN '-' ELSE '' END + REPLACE(InputValue,'-','')
您可能需要将其转换为金钱(或数字或小数)