在末尾插入带负号的负值

时间:2014-04-11 12:44:11

标签: sql sql-server-2008 insert

我想在sql server 2008表中插入一个值。

值类似于20.00-10.00-

减号位于值的末尾。

我怎样才能做到这一点?

4 个答案:

答案 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,'-','')

您可能需要将其转换为金钱(或数字或小数)